Jest.js 强制窗口未定义

Posted

技术标签:

【中文标题】Jest.js 强制窗口未定义【英文标题】:Jest.js force window to be undefined 【发布时间】:2018-12-27 18:35:12 【问题描述】:

我正在使用 jest + 酶设置进行测试。如果定义了窗口,我有条件渲染某些东西的功能。

在我的测试套件中,我试图达到第二种情况,即未定义窗口,但我无法强制。

it('在没有定义窗口时做一些事情', () => 窗口=未定义; 期望(myFunction()).toEqual(thisWhatIWantOnUndefinedWinow); );

但即使我强制窗口未定义,它也没有达到预期的情况,窗口总是窗口(jsdom?)

这是我的玩笑设置的问题还是我应该以另一种方式处理?

【问题讨论】:

您的答案可能会在这里***.com/questions/41885841/…如果您有任何疑问,请告知 更多的是关于替换单个方法,这对我来说是可能的,但我想让整个窗口未定义,我不能用那个解决方案来做到这一点 这可能是你的答案:***.com/questions/48691604/… 是的,这正是我所需要的,谢谢 :) 【参考方案1】:

我可以使用以下模式测试未定义 window 的场景。它允许您在同一文件中运行带有和不带有window 的测试。不需要在文件顶部添加@jest-environment node

describe('when window is undefined', () => 
    const  window  = global;
    beforeAll(() => 
      // @ts-ignore
      delete global.window;
    );
    afterAll(() => 
      global.window = window;
    );
    
    it('runs without error', () => 
      ...
    );
);

    

【讨论】:

【参考方案2】:

这是我在选定的 jest 测试期间强制 window 未定义的操作。

使用 window = undefined 进行测试

您可以通过在文件顶部添加@jest-environment node 来强制在某些测试文件中取消定义窗口。

test-window-undefined.spec.js

/**
 * @jest-environment node
 */

// ^ Must be at top of file

test('use jsdom in this test file', () => 
  console.log(window)
  // will print 'undefined' as it's in the node environment  
);

用窗口测试

如果您需要 window 对象,只需删除顶部的该语句即可。

credit to this answer here

【讨论】:

这个答案并不真正符合问题所在。在您的示例中,您只检查是否定义了窗口。 Jarosław Wlazło 询问如何模拟它以返回 undefined,因为 jsdom 将使 Window 可用。 @ConstantinChirila 在文件顶部使用@jest-environment node 使window 对象未定义......我会进一步改进答案 这个答案肯定对我有帮助。在编写要在节点和浏览器中运行的代码时使用它来获得 100% 的覆盖率。

以上是关于Jest.js 强制窗口未定义的主要内容,如果未能解决你的问题,请参考以下文章

强制 GCC 通知共享库中未定义的引用

未捕获的 ReferenceError:未定义窗口

NextJS Webworker`未定义窗口`

NextJS - 未定义窗口

是否通过强制转换为有符号的未定义行为来检测无符号环绕?

.NET Core/EF Core 2.0 升级后急切加载“类型之间未定义强制运算符”