gpt4 book ai didi

jestjs - Mock.mockImplementation() 不工作

转载 作者:行者123 更新时间:2023-12-03 13:00:15 27 4
gpt4 key购买 nike

我有一个服务类

服务.js

class Service {
}
export default new Service();

我正在尝试为此提供一个模拟实现。如果我使用这样的东西:
jest.mock('./Service', () => { ... my mock stuff });

它工作正常,但是我无法访问在模拟之外声明的任何变量,这有点限制,因为我想重新配置模拟返回的内容等。

我试过这个(灵感来自另一篇 StackOverflow 文章: Service mocked with Jest causes "The module factory of jest.mock() is not allowed to reference any out-of-scope variables" error)
import service from './Service';

jest.mock('./Service', () => jest.fn);

service.mockImplementation(() => {
return { ... mock stuff }
);

不幸的是,当我尝试运行它时,出现以下错误:
TypeError: _Service2.default.mockImplementation is not a function

最佳答案

我和@Janos 有同样的问题,其他答案也没有帮助。你可以做两件事:

  • 如果您只需要模拟服务中的一个函数,请在您的测试文件中:
    import service from './Service';

    jest.mock('./Service', () => jest.fn());

    service.yourFunction = jest.fn(() => { /*your mock*/ })

  • 如果您需要模拟整个模块:
    假设你的 service.js 在 javascript/utils 中,创建一个 javascript/utils/_mocks_ 并在其中创建一个 service.js 文件,然后你可以在这个文件中模拟整个类,例如:
    const myObj = {foo: "bar"}

    const myFunction1 = jest.fn(() => { return Promise.resolve(myObj) })

    const myFunction2 = ...

    module.exports = {
    myFunction1,
    myFunction2
    }
    然后在您的测试文件中添加:
    jest.mock('./javascript/utils/service')
    ...从模拟文件导出的函数将通过您的测试文件执行来命中。
  • 关于jestjs - Mock.mockImplementation() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45771844/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com