【问题标题】:How to mock a deeply nested function with TypeScript and Jest如何使用 TypeScript 和 Jest 模拟深度嵌套的函数
【发布时间】:2020-06-19 21:49:36
【问题描述】:

我想测试我的模块并模拟 axios 外部依赖项。问题是我直接测试的方法没有(直接)导入 axios。它相当“隐藏”在中间调用后面。

像这样,A 和 B 是我的自定义模块:A 调用 B,B 使用 axios 所以,A 不导入 axios,只导入 B。

由于b是axios周围很薄的一层,我不想直接测试。我宁愿只测试 A,然后模拟 axios。

如何做到这一点? 如果我有一个自定义模块 C 而不是 axios,它有什么不同吗?

【问题讨论】:

    标签: typescript mocking jestjs


    【解决方案1】:

    是的,您可以模拟一个模块 - 请参阅 https://jestjs.io/docs/en/manual-mocks 。要模拟 axios,只需使用jest.mock('axios'),然后从“axios”导入的任何内容都将是一个模拟(您可以通过标准的 Jest 模拟 API 配置它)。请注意,它将针对整个测试用例进行模拟,例如如果你测试一个使用另外两个模块的模块,每个模块都使用 axios,你不能只为其中一个模拟 axios。

    【讨论】:

    • 我试过了,但我无法让它运行。你能发布一些简单的例子吗?
    • 模块B尝试调用axios.create()时上线失败,说明axios未定义。看起来它没有选择模拟版本(在 mocks 中定义)
    • 工作示例在我发送链接的文档中。也许你可以发布你不工作的代码,以便我们找出它为什么不工作。
    猜你喜欢
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2019-08-11
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多