4

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

一点上下文:

    "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(); <---- .... }

4

1 回答 1

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

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

于 2019-08-05T16:15:31.990 回答