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

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

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

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

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

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

【问题讨论】:

标签: reactjs testing jestjs enzyme


【解决方案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% 的覆盖率。
    猜你喜欢
    • 2018-12-23
    • 2017-10-01
    • 2021-10-06
    • 2019-06-03
    • 2021-01-15
    • 2019-10-12
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多