在jest.fn()
模拟的回调中使用jest.fn()
定义Jest模拟似乎不起作用。如果在回调之外首先定义了模拟,则它将正常工作。
是否支持在回调中定义模拟?
it('passes', () => {
const mock = jest.fn();
const object = {method1: jest.fn(() => ({method2: mock}))};
object.method1().method2();
expect(object.method1().method2).toHaveBeenCalledTimes(1);
});
it('does not pass', () => {
const object = {method1: jest.fn(() => ({method2: jest.fn()}))};
object.method1().method2();
expect(object.method1().method2).toHaveBeenCalledTimes(1);
});
答案 0 :(得分:1)
第二个示例未通过的原因是由于每次调用object.method1()
时,您都会在method2
属性中返回一个新的间谍。
因此,当您执行object.method1().method2();
时,您将创建一个模拟函数并通过对method2
的调用来执行它。该模拟功能确实正在执行。
当您在期望语句中调用object.method1().method2
时,您将在method2
中获得一个新创建的模拟函数。尚未调用此模拟函数,因此测试失败。