unit-testing - 如何在 Jest 中将模拟函数恢复为原始值?

标签 unit-testing jestjs

我在测试中模拟了一个类的静态函数,但我会影响其他测试。由于静态函数的性质,代码是:

  test('A', async () => {
    expect.assertions(2);
    let mockRemoveInstance = jest.fn(() => true);
    let mockGetInstance = jest.fn(() => true);
    User.removeInstance = mockRemoveInstance;
    User.getInstance = mockGetInstance;
    await User.getNewInstance();
    expect(mockRemoveInstance).toHaveBeenCalled();
    expect(mockGetInstance).toHaveBeenCalled();
  });

  test('B', () => {
    let mockRemoveInstance = jest.fn();
    const Singletonizer = require('../utilities/Singletonizer');
    Singletonizer.removeInstance = mockRemoveInstance;
    User.removeInstance();
    expect.hasAssertions();
    expect(mockRemoveInstance).toHaveBeenCalled();
  });

B 测试中 User.removeInstance() 仍然被 A 测试模拟,如何将 removeInstance() 重置为其类定义的原始函数?

最佳答案

您可以尝试使用 jest.spyOn
这样的事情应该为您恢复功能:-

    let mockRemoveInstance = jest.spyOn(User,"removeInstance");
    mockRemoveInstance.mockImplementation(() => true);

    User.removeInstance();
    expect(mockRemoveInstance).toHaveBeenCalledTimes(1);

    // After this restore removeInstance to it's original function

    mockRemoveInstance.mockRestore();

关于unit-testing - 如何在 Jest 中将模拟函数恢复为原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49209746/

相关文章:

php - 如何使用 PHPUnit 测试特定方法

unit-testing - 这种依赖注入(inject)的设计容易理解吗?

java - 在哪里可以找到数学解析器/引擎的测试?

ios - IOS 上的 Firebase TestLab - .xctestrun 文件未指定任何测试目标

javascript - react : How to test component's input which uses ref?

unit-testing - 使用 Jest 和 Enzyme 测试 switch 语句

javascript - Jest 模拟调用对象可能未定义

reactjs - 如何模拟另一个文件中的返回值?

python - Visual Studio 2019 - 无法运行 Python 单元测试 - 无法导入测试模块 :

typescript - 编译时未定义的 TypeScript 枚举