[英]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 的核心模塊(例如:
fs
或path
),則需要顯式調用例如jest.mock('path')
,因為默認情況下不會模擬核心 Node 模塊。
這可以避免 NPM 包的模擬與同名的本地模塊之間的意外沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.