簡體   English   中英

模擬與導入然后模擬

[英]Mock vs Import Then Mock

我試圖了解什么時候可以只導入一個模擬,什么時候我需要導入模擬並且仍然在測試文件中使用jest.mock 我正在查看 Jest 的 Github 中的手動模擬示例

一步模塊 Mocking

在 Lodash 測試中, Lodash__mocks__目錄中使用createMockFromModule進行模擬,導出,並使用標准模塊導入簡單地導入並直接在測試中使用(無需額外的模擬)。

兩步 Mocking

在同一個項目中, 用戶 model 被導出,並且有一個單獨的用戶模擬文件 但是在User mocked test中, User 被導入但是還有一個額外的步驟使用jest.mock('../models/user');

我的問題/困惑

為什么 Lodash 測試不需要測試文件中的額外jest.mock ,或者為什么 User 測試需要它? 在項目中,我似乎可以測試實際和模擬用戶實現,但Lodash將只使用__mocks__目錄中的createMockFromModule創建/導出的。

不同之處在於lodash是 Node 模塊,而user是本地模塊,后者需要jest.mock('../models/user')才能使用來自__mocks__的模擬。

正如文件所述,

如果您的模塊 mocking 是 Node 模塊(例如: lodash ),則 mock 應放置在與 node_modules 相鄰的__mocks__目錄中(除非您將 root 配置為指向項目 root 以外的文件夾)並且將自動模擬。 無需顯式調用jest.mock('module_name')

警告:如果我們想模擬 Node 的核心模塊(例如: fspath ),則需要顯式調用例如jest.mock('path') ,因為默認情況下不會模擬核心 Node 模塊。

這可以避免 NPM 包的模擬與同名的本地模塊之間的意外沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM