【问题标题】:Jest + React: Reset location.href before each testJest + React:在每次测试之前重置 location.href
【发布时间】:2022-11-12 07:26:27
【问题描述】:

我有一个考虑 URL 参数的 React 组件,然后在考虑该参数的情况下进行一些提取。默认情况下,如果未设置参数,则使用默认值。

问题是 Jest 似乎不会在每次测试后重置 href 属性,因此如果前一个测试导航到 my-url?some=param,下一个测试仍将设置 href

这意味着在更改 href 与测试中的组件交互后,下一个测试将具有先前的值。这样做的一个副作用是如果未设置参数,我无法测试默认值,因为它将始终由先前的测试设置。

我试过的

  beforeEach(() => {
    window.location.assign('');
  });

抛出错误Not implemented: navigation (except hash changes)

  beforeEach(() => {
    window.location.href = '';
  });

引发错误Not implemented: navigation (except hash changes)

  beforeEach(() => {
    Object.defineProperty(window, 'location', {
      value: {
        href: ''
      }
    });
  });

引发错误Cannot redefine property 'location'

在所有这些情况下,它是空字符串 '' 还是像 http://localhost 这样的正确 URL 都没有关系。

问题

有没有办法在每次测试之前重置href 属性?我并不是要嘲笑它:它应该像默认行为一样工作,而只是在每次测试之前重置它。

这不应该是 Jest 的默认行为吗?自动清理 DOM 但将 href 保留为先前测试的值有什么用?

【问题讨论】:

    标签: reactjs jestjs navigation location-href


    【解决方案1】:

    看起来这些没有在 JSDOM 中实现。

    无论如何,您都需要模拟它。你可以这样尝试:

    const mockHref = jest.fn();
    Object.defineProperty(window, 'location', {
      value: {
        get href() {
          return mockHref();
        },
      },
    });
    
    describe('it should work', () => {
      beforeEach(() => {
        mockHref.mockReturnValue('empty');
      })
    
      it('should work', () => {
        expect(window.location.href).toEqual('empty')
      })
    })
    

    【讨论】:

    • 同样的问题:Error: Not implemented: navigation (except hash changes)
    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 2014-09-20
    • 2018-07-21
    • 2018-12-04
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多