由于您仅在测试文件的上下文中模拟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'函数还会调用其中的一些其他函数,为简洁起见我省略了这些函数 –