2016-11-10 47 views
0

所以我有一個依賴:依賴加載和文件系統懲戒

dep = require('dep') 

如果我模擬出DEP調用的函數之前的文件系統中,DEP從導出的文件未找到。

mockFs({}) 
dep.bar() #file where dep exported from not found 

如果我打電話嘲諷了DEP從發現導出的文件之前的功能。

dep.foo() 
mockFs({}) 
dep.bar() #works 

有什麼想法來解釋這種行爲?

回答

0

require()調用緩存,所以dep使用真實的文件系統,因爲它可能叫require('fs'),這是沒有嘲笑。

懲戒fs後來意味着任何調用require('fs')將使用模擬,但已加載任何不受影響。

+0

謝謝!任何想法讓它繼續並加載?看起來像其他函數也加載,如果事先調用dep.foo() – Drew

+0

這是一個棘手的部分關於單元測試和嘲笑 - 文件的加載順序!通常,所有require()都位於每個文件的頂部,因此所有這些依賴關係都會被加載,因爲在第一個測試文件(和第一個mock)甚至運行之前,所有文件都會先加載!一些模擬庫具有可以接管現有功能甚至需要緩存的「間諜」。有時你可以改變那些'require()'調用的地方,以便有效地模擬它們。 – clay

+0

對於我在調用上面的場景2中的第二個函數時沒有發現與依賴關係相關的文件而言沒有考慮到的內容有什麼想法?在所有代碼之前都需要依賴項。謝謝你! – Drew