由於您僅在測試文件的上下文中模擬clearSomethingInModal
,因此中的clearSomethingInModal
仍爲原始文件,因此您的方法無效。重點是你不能嘲笑在myFunction.js
中直接創建的東西。你可以嘲笑的唯一的事情是,你導入到myFunction.js
從您的測試時調用它們傳遞給你的函數
- 模塊,例如
import clearSomethingInModal from 'clearSomethingInModal'
- 回調
這是有道理的,如果你把myFunction.js
想象成一個黑盒子,你可以控制進入的東西,比如導入或者函數參數,以及你可以在哪裏測試出來的東西。但是你無法測試盒子內發生的事情。
下面是兩個例子,在列表中反映2分
myFunctions.test.js
import { resetModal } from '../myFunctions.js';
import clearSomethingInModal from 'clearSomethingInModal';
jest.mock('clearSomethingInModal',() => jest.fn())
describe('resetModal',() => {
it('calls the clearSomethingInModal function',() => {
resetCreationModal();
expect(clearSomethingInModal.mock.calls.length).toBe(1);
})
})
myFunctions.js
import clearSomethingInModal from 'clearSomethingInModal';
export resetModal() {
clearSomethingInModal()
}
myFunctions.test.js
import { resetModal } from '../myFunctions.js';
describe('resetModal',() => {
it('calls the clearSomethingInModal function',() => {
const clearSomethingInModal = jest.fn();
resetCreationModal(clearSomethingInModal);
expect(clearSomethingInModal.mock.calls.length).toBe(1);
})
})
個
myFunctions.js
export resetModal(clearSomethingInModal) {
clearSomethingInModal()
}
謝謝安德烈亞斯,這是一個很好的解釋。所以我認爲,不改變我的功能的結構,我不能以我想要的方式測試。因此,(a)是否意味着在功能設計中存在問題,以及(b)在目前的形式下,是否會有適用於該功能的有效測試?請注意,'resetModal'函數還會調用其中的一些其他函數,爲簡潔起見我省略了這些函數 –