【问题标题】:Following Jest Docs, Getting an error on mockImplementation(). What am I doing wrong?按照 Jest Docs,在 mockImplementation() 上出现错误。我究竟做错了什么?
【发布时间】:2020-01-21 18:31:03
【问题描述】:

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

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

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())

这是我在 mockImplementatin 上遇到的错误

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

我所做的只是关注文档。在我进入分区之前,我没有任何问题。

【问题讨论】:

    标签: typescript jestjs ts-jest


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

    【讨论】:

    • 谢谢你的例子!我将如何在模拟模块部分模拟 axios? jestjs.io/docs/en/mock-functions#mocking-modules
    • 感谢您的解决方案。我有问题...您提出的解决方案是否特定于打字稿本身?我自己没有弄清楚这一点,这让我怀疑我是否足够了解 Typescript。你建议我去哪里学习这个?
    猜你喜欢
    • 2022-06-10
    • 2014-06-15
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多