typescript - 按照 Jest Docs,在 mockImplementation() 上出现错误。我究竟做错了什么?

标签 typescript jestjs ts-jest

我正在尽力遵循 Jest 的文档,并且我也在尽力自学。我在关注官方 Jest 网站上的文档时遇到问题。我在模拟模块部分。它与 axios 有关,但我不断在 typescript 中收到错误,该错误表明该模拟实现不是属性(无论模拟是什么)

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

foo.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)

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

最佳答案

这个foo.ts:

export default function() {
  return 1;
};

...可以这样 mock :

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

关于typescript - 按照 Jest Docs,在 mockImplementation() 上出现错误。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58032756/

相关文章:

reactjs - React 测试库测试错误 `NaN` 是 `left` css 样式属性的无效值

unit-testing - vue-test-utils:如何在 mounted() 生命周期 Hook (使用 vuex)中测试逻辑?

javascript - 开 Jest - 测试 mobx store @action TypeError : is not a function

typescript - 如何使 Next.js getStaticProps 与 typescript 一起使用

javascript - 有没有办法在泛型 (<T>) 函数/类 (Typescript) 中获取泛型类型的名称?

angular - @Input() 属性无法访问,因为它说对象在未定义的 Angular 2 中

typescript - 开玩笑,我如何模拟导出的函数以返回 Promise 而不是 undefined?

Typescript - 为什么没有相应地强制实现接口(interface)

typescript - 如何在 tsconfig.json 上启用 typeRoots 的 typescript/expressjs 应用程序上运行 jest

jasmine - 如何修复类型 'AsymmetricMatcher<any>' 不能分配给类型 '() => void' 。在 Jasmine /开 Jest