Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解决Jest测试代码mockRestore不';行不通_Javascript_Unit Testing_Jestjs - Fatal编程技术网

Javascript 如何解决Jest测试代码mockRestore不';行不通

Javascript 如何解决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

我正在使用Jest进行客户端测试。 但我有个问题

当我将类方法替换为mock函数并恢复mock函数时, 我使用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]
从文档中:

请注意,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();
  });
});

以下是完整的演示: