【问题标题】:Nested Jest mock fails unless previously defined除非先前定义,否则嵌套 Jest 模拟失败
【发布时间】:2019-08-15 10:09:01
【问题描述】:

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);
});

【问题讨论】:

    标签: javascript unit-testing mocking jestjs


    【解决方案1】:

    第二个示例未通过的原因是,每次调用 object.method1() 时,都会在 method2 属性中返回一个新间谍。

    因此,当您执行object.method1().method2(); 时,您正在创建一个模拟函数并通过调用method2 来执行它。这个模拟函数确实在执行。

    当您在期望语句中调用object.method1().method2 时,您将在method2 中获得一个新创建的模拟函数。这个模拟函数没有被调用,所以你的测试失败了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多