2016-10-14 68 views
0

我有一些組件與第三方插件/庫的子組件。我使用Jest進行單元測試和toMatchSnapshot()方法。我試圖排除jest.unmock('ChildComponet.js')子組件,我得到這個錯誤:React Jest匹配快照,崩潰時測試組件與子組件

jest.unmock('ChildComponet.js')被調用,但automocking被禁用。刪除不必要的電話jest.unmock或通過jest.enableAutomock();爲此測試啓用自動鎖定功能。這個警告可能是15

我啓用jest.enableAutomock();現在我那朵錯誤開玩笑默認配置變化的結果:

類型錯誤:無法讀取屬性未定義

「DEFINE_MANY」我把這個在我的package.json但沒有任何反應:

「unmockedModulePathPatterns」: 「ROOTDIR/node_modules /反應」]

有什麼建議嗎?

是在React中對組件進行單元測試的正確方法嗎?

回答

1

模擬出最簡單的方式作出反應,我發現迄今使用的組件:

jest.mock('component',()=> 'ComponentName') 

你之前,你要測試的模塊的導入語句。

第一個參數是全局npm模塊的名稱或本地組件的路徑(請注意相對於您的測試文件的路徑)。第二個參數只是一個返回字符串的函數(我總是返回我在jsx中使用的相同名稱)。這將導致一個轉儲組件,它除了與原始組件相同的名稱外什麼都不做。所以在你的快照中你不會看到任何區別,除了被嘲弄的組件不會渲染任何孩子。

現在來看你得到的錯誤消息。

jest.unmock('ChildComponet.js') was called but automocking is disabled...

的問題是,你使用jest.unmock,而不是jest.mock。 Jest具有自動模擬所有模塊的依賴關係的功能。啓用自動模擬功能後,您可以使用jest.unmock來獲取真正的植入體例,如lodash或時刻。由於汽車模擬功能讓很多人感到困惑,他們決定讓它成爲可選項。 Tldr你試圖去嘲弄一些沒有被嘲笑的東西,因爲你沒有啓用自動嘲諷。

TypeError: Cannot read property 'DEFINE_MANY' of undefined

當您啓用自動模擬時,每個導入的模塊將被替換爲undefined。我不能說太多的unmockedModulePathPatterns設置,但我相信你必須使用相同的模式來導入模塊,所以如果它是一個全球性的,你不必把它的路徑node_modules文件夾。

+0

非常感謝。我測試它。 –