我正在开发一个简单的React应用程序,该应用程序已打开一个带有window.open()的新选项卡,用于只读的“演示者”#39;视图。我正在为Jest中的条件渲染编写测试,但似乎无法正确地更改window.name。具体来说,我正在测试调用handleStart()的行。
这是正在测试的代码:
componentDidUpdate() {
localStorage.setItem('timeRemaining', this.state.timeRemaining);
if (window.name === 'presenter' && this.state.timeRemaining > 0) {
this.handleStart();
}
}

以下是我目前的测试:
it('checks the window and state to call #handleStart if started in parent view', () => {
const spy = jest.spyOn(wrapper.instance(), 'handleStart');
global.window.name === 'presenter';
wrapper.setState({ timeRemaining: 100 });
wrapper.update();
expect(spy).toHaveBeenCalled();
});

答案 0 :(得分:1)
原来我是一个傻瓜,并试图分配global.window.name错误。测试应该是
it('checks the window and state to call #handleStart if started in parent view', () => {
const spy = jest.spyOn(wrapper.instance(), 'handleStart');
global.window.name = 'presenter';
wrapper.setState({ timeRemaining: 100 });
wrapper.update();
expect(spy).toHaveBeenCalled();
});

保留此问题,因为它在这里看起来很独特,可能对某人有帮助。作为参考,如果你在Jest中测试Window对象,你可以使用&global;' global'如此处所示代替'窗口'