我无法在模拟功能时遇到麻烦。
我首先模拟它,现在我不能取消模拟
//myClass.js
class myClass {
static check(v1,v2) {
return v1 > v2;
}
static async getinfo(v1,v2) {
if (this.check(v1,v2)) {
return await get('api.google.com');
}
return [];
}
}
//myclass.spec.js
describe('Testing myClass', () => {
describe('testing processing', () => {
it('should return result', () => {
const mockPatch = jest.fn().mockImplementation((version, solution) => false);
myClass.check = mockCheck;
try {
const result = await myClass.getinfo(1,2);
expect(result).toBe.([]);
}catch(e) {
throw e;
}
})
})
describe('Testing check', () => {
it('should return true', () => {
expect(myClass.check(2,1)).toBe.true
})
})
})
我已经尝试过
myClass.check.mockRestore()
beforeEach(() => {myClass.check.mockRestore()})
jest.unmock('./myClass.js)
反正我可以解决这个问题吗?我读了所有开玩笑的文件,却找不到任何东西
答案 0 :(得分:2)
永远不要通过重新分配方法来嘲笑方法,Jest无法以这种方式恢复其原始实现。
这应该始终通过spyOn
完成:
jest.spyOn(myClass, 'check').mockReturnValue(false)
这样,可以使用restoreMock
或restoreAllMocks
恢复方法。最好在Jest configuration中全局启用此功能。
答案 1 :(得分:0)
我假设您希望做的是模拟在特定测试中使用的实现,但是在不进行模拟的情况下让其他测试起作用。
如果是这样,我想您可以将module mocking strategy与mockReturnValueOnce结合使用。
请确保在测试的顶部导入模块,然后使用相同的路径调用jest.mock
。之后,您应该可以调用myClass.check.mockReturnValueOnce
,并且它将被模拟,直到下次调用它为止。之后,它将正常运行normally