Javascript 如何解决Jest测试代码mockRestore不';行不通
我正在使用Jest进行客户端测试。 但我有个问题 当我将类方法替换为mock函数并恢复mock函数时, 我使用JestJavascript 如何解决Jest测试代码mockRestore不';行不通,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我正在使用Jest进行客户端测试。 但我有个问题 当我将类方法替换为mock函数并恢复mock函数时, 我使用JestmockRestore方法。 但它不起作用 我如何解决这个问题 console.log(OriginalClass.call); // it will result is here. // console.log test/vue/plugins/swaggerClient.spec.js:46 // [AsyncFunction: call] OriginalC
mockRestore
方法。
但它不起作用
我如何解决这个问题
console.log(OriginalClass.call);
// it will result is here.
// console.log test/vue/plugins/swaggerClient.spec.js:46
// [AsyncFunction: call]
OriginalClass.call = jest.fn().mockReturnValue(`test`);
OriginalClass.call.mockRestore();
console.log(OriginalClass.call);
// it will result is here.
// console.log test/vue/plugins/swaggerClient.spec.js:62
// { [Function: mockConstructor]
// _isMockFunction: true,
// getMockImplementation: [Function],
// mock: [Getter/Setter],
// mockClear: [Function],
// ↑ I expect this that is [AsyncFunction: call]
从文档中:
请注意,mockFn.mockRestore仅在使用jest.spyOn创建mock时有效
因此,以下是解决方案:
OriginalClass.ts
:
export class OriginalClass {
public static call() {
return 'real data';
}
public static testCall() {
return this.call();
}
}
单元测试:
OriginalClass.spec.ts
import { OriginalClass } from './OriginalClass';
describe('OriginalClass', () => {
it('should mock correctly', () => {
jest.spyOn(OriginalClass, 'call').mockReturnValue(`test`);
const actualValue = OriginalClass.testCall();
expect(actualValue).toBe('test');
(OriginalClass.call as jest.MockedFunction<typeof OriginalClass.call>).mockRestore();
});
it('should restore to original implementation', () => {
expect(jest.isMockFunction(OriginalClass.call)).toBeFalsy();
});
});
以下是完整的演示: