笑话模拟总是给出未定义的(打字稿+ ts-jest)

时间:2019-08-05 11:45:50

标签: typescript mocking jestjs ts-jest

我似乎无法使模拟正常工作。

一些上下文:

    "jest": "^24.8.0",
    "ts-jest": "^24.0.2",
    "typescript": "^3.5.3"

  • storage.ts 包含方法getOsTmpDir

  • moduleA.ts 正在消耗 storage.ts

  • moduleA.spec.ts 中:

jest.mock('./storage', () => ({
    getOsTmpDir: jest.fn().mockImplementation(() => '/tmp'),
}));

打印(在console.log(getOsTmpDir());中给出未定义

我尝试过的其他事情:

  • getOsTmpDir: jest.fn(() => '/tmp')
  • getOsTmpDir: jest.fn().mockReturnValue('/tmp')

但似乎无济于事。我想念什么?


编辑:我已经找到问题了。我没有注意到所有模拟在每次测试之前都已重置,因为我已经在文件顶部定义了模拟(一次) ,则在进行任何测试之前,模拟就被终止了

beforeEach(async () => { jest.resetAllMocks(); <---- .... }

1 个答案:

答案 0 :(得分:1)

您如何导出/导入该方法?这是模拟导出函数时的外观:

定义“真实”功能:

~fileA.ts
...

export function what() {
  console.log('A');
}
...

测试:

~test.ts
...

import { what } from './fileA';

jest.mock('./fileA', () => ({
    what: jest.fn().mockImplementation(() => console.log('B')),
}));

describe('mocks', () => {
  it('should work', () => {
    what();
  });
});
$ jest test.ts

...
console.log test.ts:9
    B

您应该看到测试调用了what的模拟实现并记录了一个B。