javascript - 除非先前定义,否则嵌套 Jest 模拟失败

标签 javascript unit-testing mocking jestjs

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/

相关文章:

unit-testing - 如何使用Visual Studio 2015预览生成“智能单元测试”?

javascript - 密码匹配确认

java - 根据 HttpServletRequest 参数使 HTML 元素可见/不可见

unit-testing - 如何为 Fluent nHibernate 约定创建测试?

Python - 模拟导入字典

c# - Moq:如何检索模拟对象的 ID

java - 对调用外部服务的类进行单元测试

javascript - 超出最大调用堆栈大小避免出现这种情况

javascript - 重用简单的 Javascript 函数

asp.net-mvc - 我如何对这个业务逻辑进行单元测试?