javascript - 如何测试 react 组件的数组长度?

标签 javascript reactjs testing

仍然对什么以及如何监视 React Components 中的东西感到困惑 我有这个函数,它基本上过滤列表并在我为 team 键入值时返回匹配项:

findMatchesForTeam = (team, venue) => {
  if (team) {
    console.log(team) // THIS GETS THE RIGHT TEAM (e.g. Chelsea) WHEN TESTING
    return this.props.matches.filter(t => t.homeTeam === team.name || t.awayTeam === team.name)
      .map((match) => (
        this.result(match)
      ))
  }
}

还有我的测试:

describe('other functions', () => {
  it('expects the matches array to have been filtered', () => {
    wrapper.instance().findMatchesForTeam('Chelsea');
    expect(matchesStub.length).to.equal(2);
  });
});

所以我在我的组件中调用该方法并搜索“Chelsea”并在变量 matchesStub 中我得到了:

const matchesStub = [
  {awayGoals: 1, awayTeam: "Man City", homeGoals: 1, homeTeam: "Arsenal", month: "February"},
  {awayGoals: 2, awayTeam: "Man City", homeGoals: 3, homeTeam: "Chelsea", month: "February"},
  {awayGoals: 0, awayTeam: "Chelsea", homeGoals: 0, homeTeam: "Man Utd", month: "February"}
];

但是我的测试表明它的长度应该是 3(这是初始长度)并且不会打扰过滤。代码有效,但测试无效。

最佳答案

感谢上面的 Will,这个解决方案奏效了:

expect(wrapper.instance().findMatchesForTeam('Chelsea').length).to.equal(2)

嗯,实际上这并不完全正确。最终的解决方案是:

const teamToFilterBy = {name: 'Chelsea'};
expect(wrapper.instance().findMatchesForTeam(teamToFilterBy).length).to.equal(2);

这是因为我上面的过滤器方法需要一个对象,因为它需要 name 属性。在我的测试中,我只向它传递了一个字符串,因此即使它正确地记录了它,显然一个字符串不能有 .name 属性。

感谢所有帮助我到达那里的人!

关于javascript - 如何测试 react 组件的数组长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48868601/

相关文章:

javascript - React 在 componentDidMount() 的函数内设置状态,传递要更新的参数

testing - 具有多个同时用户的端到端/功能测试网络应用程序 - 最好的方法是什么?

Javascript 按值查找嵌套对象

reactjs - 如何在reactjs中显示传递给组件的参数以及如何为组件提供可选参数?

javascript - AngularJS - ngRepeat。 ng-repeat 重新渲染后需要保持关注同一元素事件

javascript - 将参数传递给 redux 调度函数

go - 无法访问同一个包中的私有(private)方法进行测试

http - 是否有像 example.org 这样的 URL 或网站总是产生 404 错误?

javascript - 当出现异步超时错误时,如何使用 jest 测试 Express 应用程序?

javascript - 如何为通过 URL 传递变量创建额外的保护? [JavaScript]