在Jest Docs之后,在模仿Implementation()上获取错误。我究竟做错了什么?

时间:2019-09-20 17:22:50

标签: typescript jestjs ts-jest

我正在竭尽全力地跟着文档一起开玩笑,并且我也在尽力自己学习。在关注Jest官方网站上的文档时遇到问题。我在模拟模块部分。它与axios有关,但我一直在打字稿中收到错误消息,那就是ockmImplementation不是其属性(不管是什么模拟物)

我尝试四处看看是否是我的配置有问题,但我无法弄清楚。

foo.ts

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

test.ts

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

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

这是我在模拟immplementatin上遇到的错误

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

我正在做的只是关注文档。直到我要进行介绍,我才有问题。

1 个答案:

答案 0 :(得分:1)

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分配给正确键入的模拟默认导出。