reactjs - 测试包含 React Router Link with Enzyme 的组件

标签 reactjs enzyme

我正在使用 enzyme 。我需要测试一个将 React router Link 作为子组件的组件。我需要以下内容

  • 使用 enzyme 的 mount() 挂载组件,因为我需要测试整个组件树
  • 测试组件属性更改时的行为。

我无法使用 StaticRouter 或 MemoryRouter 包装我的组件,因为 enzyme 只允许在根级别使用 setProps()。

我当前的解决方案是使用 sinon 来 stub Link 渲染方法。这是一个简短的示例。

import {Link} from 'react-router-dom';
import sinon from 'sinon';

// ....
// ....

describe('test',() => {
   before(() => {
      sinon.stub(Link.prototype, 'render').callsFake(function reactRouterLinkRender() {
           const {innerRef, replace, to } = this.props;
           const _props = {href: to, ref: innerRef, replace, onClick: this.handleClick};
           return (<a {..._props}>this.props.children</a>);
       });

    });
});

是否有更好的方法来避免错误“不变违规:您不应在路由器外部使用链接”?

谢谢

最佳答案

不确定这是否对任何人有帮助,但就我而言,我设法通过浅层渲染顶级组件然后使用 div() 来获取我需要的部分。

loginPage = shallow(<LoginPage />);

...

loginPage.find(LoginForm).dive().find({name:"user"}).simulate("change", userEventMock);

关于reactjs - 测试包含 React Router Link with Enzyme 的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516344/

相关文章:

javascript - 字母数字和数字字符串排序未按预期工作

sql - 保持信息的私密性,即使对数据库用户也是如此

reactjs - 使用 Enzyme.usestate 错误更新模拟输入更改时的错误

unit-testing - 如何使用 Jest 和 enzyme 来监视 componentWillMount

reactjs - 如何在reactjs中使用formData添加多张图片

javascript - 从文件导入数组后在 react 组件内映射数组

javascript - 在URL之外访问axios body参数

javascript - React/Jest/Enzyme - 等待的时间不够长

javascript - 如何使用 Jest 内部的另一个函数来测试函数?

javascript - 如何在 Jest 的函数组件中测试回调函数