【发布时间】:2019-03-17 19:37:17
【问题描述】:
我正在构建一个博客页面,它有一个 Sidebar 和一个 Posts 组件,两者都经过单元测试,以检查它们是否呈现了 props 传递的正确数据(两者都是纯组件)。
我不得不创建一个名为BlogLayout 的包装器组件,因为我在某些时候重复了一些代码。 BlogLayout 接收帖子和类别作为 props,然后将它们传递给 Sidebar 和 Posts 组件,并使用一些样式渲染这两个组件。
问题是:我不知道应该如何测试BlogLayout 组件。它的全部目的是只将收到的道具传递给Sidebar 和Posts 组件(它将作为道具传递类别和帖子)。
我的观点和问题:
如果我测试
BlogLayout是否呈现类别和帖子(作为 UI 数据),我只会重复在两个组件中进行的完全相同的测试。我还是应该这样做吗?如果我考虑不测试它,因为它只是重复的代码,如果我不将这些道具传递给组件,我可能会遇到问题。它们将作为单元工作,但不会在应用程序中一起工作。
我对此的解决方案是对
BlogLayout进行单元测试,以仅检查它是否将正确的道具传递给子组件。这样我会有一个更简单的测试,因为知道 props 是传递下来的,我可以完全确定子组件会正确处理它,因为它们已经过测试。这可能吗?
我使用react-testing-library 进行测试。
非常感谢任何帮助我找到最佳解决方案的贡献,我远不是一个有经验的测试开发人员,所以我可能在这里对它们有一些错误的想法。
非常感谢!
【问题讨论】:
-
我应该这样做吗? - 取决于方法。您应该进行功能测试。 这可能吗? - 使用虚拟组件模拟子组件并断言他们接收道具并正确渲染。
-
@estus 这就是我的想法,但是嘲笑孩子们如何帮助他们知道他们是否收到了正确的道具?使用
react-testing-library时,我只能根据元素进行断言,这意味着我会重复测试。所以也许我的主要问题是:在这种情况下使用react-testing-library时首选的方法是什么?我在想,也许在这种情况下我不应该使用它,这样我就可以获得对子组件的引用,而不仅仅是 DOM 元素。 -
模拟组件,因此虚拟组件会将道具直接传递给 DOM,您可以使用选择器断言结果。由于 react-testing-library 非常倾向于功能测试,因此 WET 测试可能是首选,但这并不意味着您必须这样做。我个人不会。
-
我明白了,根据子组件的复杂性,它会变得更容易,但我仍然必须至少做一些映射来渲染数组道具,模拟事件以防万一传递 cb 函数,可能还有更多的情况,这只会让事情变得更加复杂。我想我会在这类测试中取消
react-testing-library。感谢您的回答!
标签: reactjs unit-testing integration-testing react-testing-library