开玩笑:如何还原到以前的模拟的实现(不是原始的)

时间:2019-04-05 17:32:58

标签: node.js unit-testing testing jestjs

我有一组3个测试,第一个具有基本的模拟实现:

Team.query = jest.fn(() => ({
  findOne: () => {
    return {
      is_disabled: false,
    };
  },
}));

在第二项测试中,我使用上述方法执行了Team.query.mockImplementationOnce,但是我将is_disabled更改为true

在第三个测试中,我想将其还原到上面的jest.fn实现中。这可能吗?

1 个答案:

答案 0 :(得分:0)

你很好,不需要额外的工作。

由于Team.query是模拟函数,因此在被mockImplementationOnce覆盖后,它将在一次调用后自动恢复为先前模拟的实现:

const Team = { };

Team.query = jest.fn(() => ({
  findOne: () => {
    return {
      is_disabled: false,
    };
  },
}));

test('Team.query', () => {
  expect(Team.query().findOne().is_disabled).toBe(false);  // Success!

  Team.query.mockImplementationOnce(() => ({ findOne: () => ({ is_disabled: true }) }));
  expect(Team.query().findOne().is_disabled).toBe(true);  // Success!

  expect(Team.query().findOne().is_disabled).toBe(false);  // Success!

  Team.query.mockImplementationOnce(() => ({ findOne: () => ({ is_disabled: 'some text' }) }));
  expect(Team.query().findOne().is_disabled).toBe('some text');  // Success!

  expect(Team.query().findOne().is_disabled).toBe(false);  // Success!
});