如何解决Jest测试代码mockRestore无法正常工作的问题

时间:2019-08-08 10:26:32

标签: javascript unit-testing jestjs

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

当我替换Class方法以模拟功能并恢复模拟功能时, 我使用Jest (x*sizeOf(int))+initialMemoryPosition方法。 但这不起作用。

如何解决此问题?

mockRestore

1 个答案:

答案 0 :(得分:0)

从文档中:https://jestjs.io/docs/en/mock-function-api#mockfnmockrestore

  

请注意,仅当使用jest.spyOn创建模拟时,mockFn.mockRestore才起作用。

所以,这是解决方法:

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

以下是完整的演示:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/57410473