Jest.js 强制窗口未定义

IT技术 reactjs testing jestjs enzyme
2021-05-17 14:27:21

我正在使用 jest + 酶设置进行测试。如果定义了窗口,我有有条件地呈现某些东西的函数。

在我的测试套件中,当未定义窗口时,我试图达到第二种情况,但我不能强制它。


    it('当窗口未定义时产生一些东西', () => {
       窗口 = 未定义;
       期望(myFunction()).toEqual(thisWhatIWantOnUndefinedWinow);
    });

但即使我强制窗口未定义,它也不会达到预期的情况,窗口始终是窗口(jsdom?)

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

2个回答

我能够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', () => {
      ...
    });
});

    

这是我window在选定的玩笑测试期间强制未定义所做的工作

使用 window = undefined 进行测试

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

测试窗口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对象,只需删除顶部的该语句即可。

归功于这里的这个答案