reactjs Jest.js强制未定义窗口

zdwk9cvp  于 2023-02-15  发布在  React
关注(0)|答案(3)|浏览(107)

我正在使用jest + enzyme测试设置。我有一个函数,如果定义了窗口,它会有条件地呈现一些东西。
在我的测试套件中,我试图达到第二种情况,当窗口没有定义,但我不能强迫它。

it('makes something when window is not defined', () => {
       window = undefined;
       expect(myFunction()).toEqual(thisWhatIWantOnUndefinedWinow);
    });

但即使我强制窗口为未定义,它也不会达到预期的情况,窗口始终是窗口(jsdom?)
是不是我的玩笑有问题还是我应该换个方式处理?

l7wslrjt

l7wslrjt1#

我可以使用下面的模式测试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', () => {
      ...
    });
});
huus2vyu

huus2vyu2#

下面是我在选定的 jest 测试中强制window为undefined所做的事情。

窗口测试=未定义

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

测试窗口-未定义规范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

xvw2m8pv

xvw2m8pv3#

把我的工作留给你

const windowDependentFunction = () => {
    if (typeof window === 'undefined') {
      return 'window does not exist'
    }

    return 'window exist'
  }

  it('should verify if window exist', () => {
    Object.defineProperty(global, 'window', {
      value: undefined,
    })
    expect(windowDependentFunction()).toEqual('window does not exist')
  })

相关问题