首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在每次测试之间清除jest状态(spies,mock)?

如何在每次测试之间清除jest状态(spies,mock)?
EN

Stack Overflow用户
提问于 2020-02-11 09:05:12
回答 1查看 1.6K关注 0票数 1

我遇到了一个问题,jest不能清除测试之间的状态。我尝试在beforeEach()afterEach()中调用restoreAllMocks(),但这没有清除我的jest.spyOn(x, 'y').mockImplementation()存根。我也试过clearAllMocks()resetAllMocks(),没有成功。

我的spec模块:

代码语言:javascript
复制
function mockFeatureFlag(flagToMock: Flag) {
  jest.spyOn(FeatureFlags, 'singleton').mockImplementation(
    () =>
      ({
        getFeatureFlag: (flag: Flag) =>
          new Promise(resolve => {
            if (flag === flagToMock) {
              resolve(true);
            } else {
              resolve(false);
            }
          }),
      } as any),
  );
}

  describe('bufferMinutesForDistance', () => {
    it('for small distances uses min buffer of 3h', async () => {
      const minutes = await util.bufferMinutesForDistance(1);
      expect(minutes).toBe(3 * 60);
    });

    it('for small distances when HALF_GHOST_BUFFER flag is true uses min buffer of 3h', async () => {
      mockFeatureFlag(Flag.HALF_GHOST_BUFFER);
      const minutes = await util.bufferMinutesForDistance(1);
      expect(minutes).toBe(3 * 60);
    });

    it('for long distances uses 12h buffer', async () => {
      const minutes = await util.bufferMinutesForDistance(1000);
      expect(minutes).toBe(12 * 60);
    });

    it('for long distances when HALF_GHOST_BUFFER flag is true cuts 12h buffer by half', async () => {
      mockFeatureFlag(Flag.HALF_GHOST_BUFFER);
      const minutes = await util.bufferMinutesForDistance(1000);
      expect(minutes).toBe(6 * 60);
    });
  });

这里有4个测试。在测试1和3中,我没有显式地模拟功能标志以返回true,我希望它返回false (默认情况下,功能标志是false )。在这里,我调用mockImplementation使特性标志在测试2中返回true。但是,在运行测试时,我看到标志在测试3中也返回true。我没有预料到这一点,因为这意味着间谍状态在两次测试之间泄漏。

如何防止jest在测试之间泄漏状态?

EN

回答 1

Stack Overflow用户

发布于 2020-02-11 09:05:12

这是Jest中的一个开放问题(潜在的bug):https://github.com/facebook/jest/issues/7083

默认情况下,Jest不会清除测试之间的间谍状态。它们可以在创建它们的测试中/之后单独显式地删除,或者您可以更改您的jest配置以自动清除测试之间的间谍状态。可以在您的jest.config.js中设置以下属性,以告知Jest清除测试之间的状态:

代码语言:javascript
复制
  restoreMocks: true,
  clearMocks: true,
  resetMocks: true,
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60160612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档