【问题标题】:Why isn't jest's clearAllMocks working and how do I clear mocks for jest spies?为什么 jest 的 clearAllMocks 不起作用,我如何清除 jest 间谍的模拟?
【发布时间】:2020-08-13 20:24:31
【问题描述】:

我在我的 React 16.13.0 应用程序中使用 jest 4.2.4。我已经设置了这种类型的模拟...

  jest.spyOn(ReduxFirebase, "getFirebase").mockReturnValue({
    firestore: jest.fn(() => ({ collection: jest.fn(() => collection) })),
  });

如何在测试之间清除这个?我试过这个...

describe("User", () => {
  afterEach(() => {
    jest.clearAllMocks();
  });

但它不起作用。稍后在测试套件中进行设置

  jest.spyOn(ReduxFirebase, "getFirebase").mockReturnValue({
    firestore: jest.fn(() => ({ collection: jest.fn(() => collection2) })),
  });

不带(原来的间谍还在。

【问题讨论】:

  • 问题不够具体。你怎么知道它不起作用?你期望什么,你会得到什么?

标签: reactjs mocking jestjs spy


【解决方案1】:

这应该可以完成工作:

const getFirebaseMock = jest.spyOn(ReduxFirebase, "getFirebase").mockReturnValue({
  firestore: jest.fn(() => ({ collection: jest.fn(() => collection) })),
});
getFirebaseMock.mockRestore();

【讨论】:

  • 谢谢。目前我没有在任何地方保存对它的引用。有什么方法可以让我以干净的状态启动测试套件(或单个测试),而无需保存之前的任何状态?
  • 如果clearAllMocks 不起作用,我不确定您是否可以。您可能需要在测试套件之前定义您的间谍,在每个测试中模拟实现并使用afterEach(getFirebaseMock.mockRestore)
  • 除了这种情况,你不能清除你的模拟来检索原始状态。除了已经打开的问题,请在此处查看github.com/facebook/jest/issues/7136
猜你喜欢
  • 2021-11-20
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
相关资源
最近更新 更多