我是 Jest 的新手,我正在尝试用它来测试一个函数是否被调用。我注意到 mock.calls.length 并没有为每个测试重置,而是在累积。如何在每次测试之前将其设为 0?我不希望我的下一个测试取决于之前的结果。
我知道 Jest 中有 beforeEach - 我应该使用它吗?重置 mock.calls.length 的最佳方法是什么?谢谢你。
代码示例:
Sum.js:
import local from 'api/local'; export default { addNumbers(a, b) { if (a + b <= 10) { local.getData(); } return a + b; }, };
Sum.test.js
import sum from 'api/sum'; import local from 'api/local'; jest.mock('api/local'); // For current implementation, there is a difference // if I put test 1 before test 2. I want it to be no difference // test 1 test('should not to call local if sum is more than 10', () => { expect(sum.addNumbers(5, 10)).toBe(15); expect(local.getData.mock.calls.length).toBe(0); }); // test 2 test('should call local if sum <= 10', () => { expect(sum.addNumbers(1, 4)).toBe(5); expect(local.getData.mock.calls.length).toBe(1); });
我发现处理它的一种方法:在每次测试后清除模拟功能:
要添加到 Sum.test.js:
afterEach(() => { local.getData.mockClear(); });
如果您想在每次测试后清除所有模拟函数,请使用clearAllMocks
afterEach(() => { jest.clearAllMocks(); });