在 jest.fn()
模拟的回调中使用 jest.fn()
定义 Jest 模拟似乎不起作用。如果模拟首先在回调之外定义,它会正常工作。
是否支持在回调中定义mock?
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);
});
最佳答案
你的第二个例子没有通过的原因是每次你调用 object.method1()
你都会在 method2
中返回一个新的 spy 属性(property)。
因此,当您执行 object.method1().method2();
时,您正在创建一个模拟函数并通过调用 method2
来执行它。这个模拟函数确实在执行。
当您在期望语句中调用 object.method1().method2
时,您将在 method2
中获得一个新创建的模拟函数。此模拟函数尚未被调用,因此您的测试失败。
关于javascript - 除非先前定义,否则嵌套 Jest 模拟失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508082/