requireCauses 問題
Node.js很容易依照需求導入依賴。它運行的很好,并且比AMD模式加載器例如RequireJS要簡單。當我們模擬那些依賴的時候問題就來了。如果Node.js中模型的加載是受控的,我們怎么做才能控制讓偽對象在測試期間被使用到?我們可以使用Node的vm模式,通過vm我們可以再新的上下文中加載模型。運行在新的上下文中,我們可以控制需求反射出模型的方法。
解決方案
謝謝這篇文章, 現在可以給你提供一個相當不錯的解決方案. 代碼在下面:
你也可以在 這里 下載代碼片段 . 雖然在不是在文章發布最多的代碼, 他仍然可以使用一些解釋. 當我們測試時, 我們要加載這個模塊進入測試, 使用theloadModulefunction代替ofrequire加載模塊測試.
第一個參數filePath指定了我們要測試模型的查找位置。第二個參數mocks包含一個對象,對象的屬性名稱要和我們嘗試require的模型的名稱相匹配。那些屬性指定的值就是偽對象,用來代替一般被require的模型。
本質上看就是用vm來加載和運行模型在另一個“上下文”中。換句話說,我們重建了全局變量(例如require和exports)以便我們能控制它們。需要注意的是我們編寫了一個可用的新require函數。所做一切就是檢查一下用執行的名字是否有一個模擬的依賴,如果每日有,我就就把它委托給那個常用的require函數。
使用模塊加載器的例子
如果你還有點困惑,你可以看下面的代碼示例,看它在上下文中的使用,也許能幫你清楚一些。首先,我們創建一個簡單的模塊。
主要注意是在7至12行,我們為fs創建了一個偽對象并使用我們新的loadModule函數將這個使用的對象聯系到上面的小模塊中(我的意思是真棒!請記住,這是真棒,對不對?)。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com