【问题标题】:How to mock an IIFE while importing in jest test如何在导入笑话测试时模拟 IIFE
【发布时间】:2019-06-10 06:54:45
【问题描述】:

在我的 jest 文件中导入 IIFE 时,我对如何模拟 IIFE 感到很困惑。 我有一个 JS 文件,其中包含我想要测试的多个函数,除了 IIFE。在我的测试中导入 JS 文件时由于 IIFE 中使用的文档对象而引发错误。

我不想测试 IIFE 功能。有什么办法可以避免这种情况的玩笑。

我尝试使用 setupFiles(在开玩笑的配置中)模拟文档,但没有成功。

还在我的测试文件中尝试了以下代码来模拟它,但又没有运气了。

jest.mock('./myModule.js', () => (
  {
    ...(jest.requireActual('./myModule.js')),
    otherFn: () => {}
  }
));

我是开玩笑的初学者,只是想避免测试 IIFE。

有什么方法可以避免在导入或模拟时执行 IIFE?

【问题讨论】:

    标签: reactjs jestjs


    【解决方案1】:

    当文件被导入时,IIFE 将始终运行。

    您可以模拟整个文件,使其永远不会运行,但您无法访问其中定义的函数。

    没有办法只模拟 IIFE,同时仍然能够访问同一文件中定义的其他函数,因为导入代码的任何内容(包括 jest.requireActual)也将运行 IIFE。

    听起来您有两个选项,即设置您的测试环境,以便 IIFE 在运行时不会引发错误,或者将函数移动到它们自己的模块,以便您可以独立于 IIFE 导入和测试它们.

    【讨论】:

    • 感谢@brian-lives-outdoors 的信息...我的 IIFE 执行 并抛出错误“无法读取属性'content' of null" 有没有办法在导入时模拟它?
    【解决方案2】:

    添加一个包装器

    (function (factory) {
        if (typeof module === 'object' && module.exports) {
            module.exports = factory();
        } else {
            factory()();
        }
    }(function() {
        // you code
        return function () {}
            
    }));
    

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2021-02-10
      • 2018-07-15
      • 2021-10-30
      • 2019-03-26
      • 1970-01-01
      • 2020-10-23
      • 2022-01-21
      • 2018-07-28
      相关资源
      最近更新 更多