像'useLocation'这样的react-router钩存根无效

时间:2020-01-20 19:43:32

标签: reactjs react-router enzyme

我正在尝试为具有路由器钩子useLocation()的React功能组件编写单元测试,如下所示。

//index.js
function MyComponent(props) {
  const useQuery = () => new URLSearchParams(useLocation().search);
   const status = useQuery().get('status');

  if (status === 'success') {
    return <ShowStatus message="OK" secret={props.secret} />;
  } else {
    return <ShowStatus message="NOT OK" secret={props.secret} />;
  }
}

//index.spec.js
describe('Test MyComponent', () => {
  it('should send OK when success', () => {
     sinon.stub(reactRouter, 'useLocation').returns({
        search: {
            status: 'success'
        }
     });
     const props = { secret: 'SECRET_KEY' };
     const wrapper = enzyme.shallow(<MyComponent.WrappedComponent {...props}/>);

     expect(wrapper.type()).to.have.length(MyComponent);
     expect(wrapper.props().message).to.equal('OK);
     expect(wrapper.props().secret).to.equal(props.secret);
  });

  it('should send NOT OK when error', () => {
     sinon.stub(reactRouter, 'useLocation').returns({
        search: {
            status: 'error'
        }
     });
     const props = { secret: 'SECRET_KEY' };
     const wrapper = enzyme.shallow(<MyComponent.WrappedComponent {...props}/>);

     expect(wrapper.type()).to.have.length(MyComponent);
     expect(wrapper.props().message).to.equal('NOT OK);
     expect(wrapper.props().secret).to.equal(props.secret);
  });
});

即使我正在useLocation上也遇到错误

TypeError: Cannot read property 'location' of undefined
at useLocation (node_modules\react-router\modules\hooks.js:28:10)

我正在尝试根据查询参数测试ShowStatus组件是否具有正确的道具。

任何建议/帮助都值得赞赏。

更新: 即使我从react-router-dom导入产品代码和测试代码,我也注意到了。我看到有人从react-router那里拿东西。

1 个答案:

答案 0 :(得分:0)

你有这个工作吗?它与我正在做的事情非常相似,并在这里问了一个问题:

How do you mock useLocation() pathname using shallow test enzyme Reactjs?