我在测试中模拟了一个类的静态函数,但我会影响其他测试。由于静态函数的性质,代码是:
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/