2

我正在尽我最大的努力跟随文档开玩笑,我也在尽我最大的努力自学。我在关注官方笑话网站上的文档时遇到问题。我在模拟模块部分。它与 axios 有关,但我一直在打字稿中收到错误,即 mockImplementation 不是一个属性(无论模拟是什么)

我试着环顾四周,看看这是否是我的配置问题,但我无法弄清楚。

脚.ts

// foo.ts
export default function() {
    // some implementation;
  };

测试.ts

import foo from '../src/foo';

// test.js
jest.mock('../src/foo'); // this happens automatically with automocking
foo.mockImplementation(() => 42);
foo();
console.log(foo())

这是我在 mockImplementatin 上遇到的错误

Property 'mockImplementation' does not exist on type '() => void'.ts(2339)

我所做的就是遵循文档。在我进入分区之前,我没有任何问题。

4

1 回答 1

4

foo.ts

export default function() {
  return 1;
};

...可以像这样嘲笑:

import * as fooModule from '../src/foo';

jest.mock('../src/foo');

const mockedFooModule = fooModule as jest.Mocked<typeof fooModule>;
const foo = mockedFooModule.default;

test('foo', () => {
  foo.mockImplementation(() => 2);
  expect(foo()).toBe(2); // Success!
})

类型为Jest提供jest.Mocked可用于为模块的自动模拟版本生成正确类型。

在这种情况下,模块只有一个default导出,所以这一行:

const foo = mockedFooModule.default

...将分配foo给正确键入的模拟默认导出。

于 2019-09-20T19:17:35.767 回答