【问题标题】:Jest: how to restore to a previous mocked implementation (not the original)开玩笑:如何恢复到以前的模拟实现(不是原始的)
【发布时间】:2019-04-07 05:34:44
【问题描述】:
我有一组 3 个测试,第一个具有基本的模拟实现:
Team.query = jest.fn(() => ({
findOne: () => {
return {
is_disabled: false,
};
},
}));
在第二个测试中,我使用上述方法执行Team.query.mockImplementationOnce,但我将is_disabled 更改为true。
在第三个测试中,我想将它恢复到上面的jest.fn 实现。这可能吗?
【问题讨论】:
标签:
node.js
unit-testing
testing
jestjs
【解决方案1】:
你很好,不需要额外的工作。
由于Team.query是模拟函数,当它被mockImplementationOnce覆盖时,它会在一次调用后自动恢复到先前模拟的实现:
const Team = { };
Team.query = jest.fn(() => ({
findOne: () => {
return {
is_disabled: false,
};
},
}));
test('Team.query', () => {
expect(Team.query().findOne().is_disabled).toBe(false); // Success!
Team.query.mockImplementationOnce(() => ({ findOne: () => ({ is_disabled: true }) }));
expect(Team.query().findOne().is_disabled).toBe(true); // Success!
expect(Team.query().findOne().is_disabled).toBe(false); // Success!
Team.query.mockImplementationOnce(() => ({ findOne: () => ({ is_disabled: 'some text' }) }));
expect(Team.query().findOne().is_disabled).toBe('some text'); // Success!
expect(Team.query().findOne().is_disabled).toBe(false); // Success!
});