reactjs - 使用 Jest 和 Enzyme 进行测试时设置 URL 参数

标签 reactjs enzyme jestjs

我的组件有:

 class Search extends Component {
  constructor(props) {
    super(props);
    this.state = {
      searchTerm:
        typeof this.props.match.params.searchTerm !== "undefined"
          ? this.props.match.params.searchTerm
          : ""
    };
  }

测试是:

 test("Search should render correct amount of shows", () => {
  const component = shallow(<Search shows={preload.shows} />);
  expect(component.find(ShowCard).length).toEqual(preload.shows.length);
});

我明白

TypeError: Cannot read property 'params' of undefined

如何解决该问题或如何在测试中设置查询参数?

最佳答案

似乎在测试之外,Search 组件正确接收了 match 属性。
在测试中浅层渲染时,您可以将其作为 Prop 传递:

test("Search should render correct amount of shows", () => {
 const match = { params: { searchTerm: 'foo' } }
 const component = shallow(<Search shows={preload.shows} match={match}/>);
 expect(component.find(ShowCard).length).toEqual(preload.shows.length);
});

在这种情况下,您并没有以不好的方式更改被测组件,您的测试用例只是发现了一个错误,这是好的并且应该针对测试,并且您通过实现默认 Prop 改进了组件,使其更加稳健。

关于reactjs - 使用 Jest 和 Enzyme 进行测试时设置 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399741/

相关文章:

javascript - 使用 Object.entries 时保留类型

javascript - 如何使用 Jest 和 enzyme 测试异步数据获取 react 组件?

javascript - 如何测试 ThemeProvider/withStyle 包裹的 React 组件?

javascript - 如何强制 Puppeteer 等待非常大的 HTML 表中的所有行完全加载并显示在 DOM 中

javascript - 是否可以只映射数组的一部分? (数组.map())

javascript - 接下来如何在react SSR框架中使用TS+css+scss?

javascript - 仅模拟模块中的一项功能,但保留原始功能

javascript - 带有 jest 和 webpack 的文件加载器给了我一个

javascript - 如何在 React 组件中设置强制属性?

reactjs - 如何模拟 JavaScript window.open 和 window.close?