我在一个读取window.location.pathname的组件中有一些条件逻辑。 为了测试这个,我想浅层渲染一个组件而不触及窗口,断言,然后再渲染浅层渲染,但这次使用不同的window.location.pathname和assert。
似乎在第一个浅渲染酶锁定窗口对象以进行所有后续渲染之后。忽略我在当前进程中对窗口对象所做的任何更改。
describe('SomeComponent', () => {
describe('render', () => {
it('default render', () => {
const component = <SomeComponent><div>test</div></SomeComponent>;
const wrapper = shallow(component);
expect(toJson(wrapper)).toMatchSnapshot();
});
});
describe('lifecycle', () => {
describe('componentDidMount', () => {
it('calls Foo.bar with the locations pathname', () => {
const pathname = '/test';
Object.defineProperty(window.location, 'pathname', {
writable: true,
value: pathname,
});
const wrapper = shallow(<SomeComponent />);
expect(Foo.bar.mock.calls[0][0]).toBe(pathname);
});
});
});
});
因此第二次测试在单独运行时有效。但是当第一次测试运行时,第二次测试失败。显然酶不会让你在测试之间更新窗口。 这是真的还是我错过了什么。如果确实如此,那么测试它的替代方法是什么?
由于