我有一个React组件,它调用window.location.href。
作为Jest测试的一部分,我模拟window.location.href的值如下:
const mockWindow = { location: { href: 'https://stackoverflow.com/questions' } };
jest.spyOn(window, 'window', 'get').mockImplementation(() => mockWindow);
const wrapper = mount(<MyComponent />);然而,当我运行它时,我会得到以下错误:
TypeError: Right-hand side of 'instanceof' is not an object
> | const wrapper = mount(<MyComponent />);
| ^这告诉我在呈现/挂载组件时存在一个内部反应问题。这个问题是特别由我模拟window对象引起的。当我取消注释该行并重新运行它时,它不会引发此错误。
我猜想,内部反应会对window.*进行其他调用,而且由于我模拟了整个对象,这些调用由React返回undefined进行,并且组件不会呈现。
如何在保留其他属性不受影响的情况下,仅模拟window 的单个属性?
或者,这个错误还有其他原因吗?还是有其他聪明的方法来解决这个问题?
发布于 2020-12-19 16:27:32
而不是做jest.spyOn(窗口,‘窗口’.)尝试使用(全局的,“窗口”.)如下所示:
const originalWindow = { ...window };
const windowSpy = jest.spyOn(global, "window", "get");
windowSpy.mockImplementation(() => ({
...originalWindow,
location: {
...originalWindow.location,
href: "http://my.test/page",
replace: mockedReplace,
},
}));记得把它清理干净后:
windowSpy.mockRestore();您可以更好地跟踪这个例子
https://stackoverflow.com/questions/65371139
复制相似问题