在玩笑测试中导入时如何模拟IIFE

时间:2019-06-10 06:54:45

标签: reactjs jestjs

我很困惑如何在将IIFE导入到我的jest文件中时对其进行模拟。 我有一个JS文件,其中包含除IIFE之外要测试的多个功能。在我的测试中导入JS文件时,由于IIFE中使用的文档对象而引发错误。

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

我尝试使用setupFiles(在Jest配置中)模拟文档,但是没有运气。

也在我的测试文件中尝试了下面的代码来模拟它,但是再没有运气了。

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

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

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

2 个答案:

答案 0 :(得分:1)

导入文件后,IIFE将始终运行。

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

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

听起来像您拥有两个选项一样,是为了设置测试环境,以便IIFE在运行时不会引发错误,或者将功能移至其自己的模块,以便您可以独立于IIFE导入和测试它们

答案 1 :(得分:0)

添加包装器

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