【问题标题】:Jest: how to restore to a previous mocked implementation (not the original)开玩笑:如何恢复到以前的模拟实现(不是原始的)
【发布时间】:2019-04-07 05:34:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js unit-testing testing jestjs


    【解决方案1】:

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

    由于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!
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-18
      • 2018-11-27
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 2020-10-01
      相关资源
      最近更新 更多