我试着模拟一个函数,并在测试后使用真实的的实现进行其他测试。
const myService = () => {
return {
foo: () => return 1;
}
}
const myService = require('./myService.js');
jest.mock('./myService');
describe('testing myService', () => {
it('should return 2 by mocked', () => {
myService.mockImplementation(() => ({
foo: jest.fn().mockResolvedValueOnce(2),
}));
expect.assertions(1);
expect(myService().foo()).toBe(2);
jest.restoreAllMocks();
});
it('should return 1', () => {
expect(myService().foo()).toBe(1);
});
});
但在此之后,foo()仍然被嘲笑。
2条答案
按热度按时间ukqbszuj1#
spyOn(object,methodName)是为对象创建模拟方法更好的选择。
我们可以通过在
afterEach()
钩子中使用jest.restoreAllMocks()
将方法恢复到原始实现。请注意,
jest.restoreAllMocks()
仅在使用jest.spyOn
创建mock时才有效;其他模拟将需要您手动还原它们。例如
myService.js
:myService.test.js
:测试结果:
bvpmtnay2#
如果你想在Jest中创建一个mock函数,同时保留对原始实现的引用,你可以使用下面的实用函数:
使用示例:
假设你有一个db.js模块,它有两个函数,getOrder和updateOrder:
要模拟getOrder函数并在以后恢复它,可以执行以下操作: