每次测试更新窗口对象

时间:2018-03-05 12:52:22

标签: javascript jestjs enzyme

我在一个读取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);
      });
    });
  });
});

因此第二次测试在单独运行时有效。但是当第一次测试运行时,第二次测试失败。显然酶不会让你在测试之间更新窗口。 这是真的还是我错过了什么。如果确实如此,那么测试它的替代方法是什么?

由于

0 个答案:

没有答案