我正在使用 Jest 进行客户端测试。 但我有一个问题。
当我将类方法替换为模拟函数并恢复模拟函数时,
我使用 Jest 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]
最佳答案
来自文档:https://jestjs.io/docs/en/mock-function-api#mockfnmockrestore
Beware that mockFn.mockRestore only works when the mock was created with jest.spyOn.
所以,这是一个 TypeScript 解决方案。
要将其翻译成 JavaScript,请替换 (OriginalClass.call as jest.MockedFunction<typeof OriginalClass.call>)
与 OriginalClass.call
以及对 ts
的所有引用与 js
.
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();
});
});
单元测试结果:
PASS src/stackoverflow/57410473/OriginalClass.spec.ts
OriginalClass
✓ should mock correctly (7ms)
✓ should restore to original implementation (1ms)
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 4.983s
这是完整的 TypeScript 演示 here .
关于javascript - 如何解决 Jest Test Code mockRestore 不起作用的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57410473/