有没有办法测试 React Component children 的变化
Is there a way to test change in children of React Component
我有一个轮播组件,我正在使用 Jest 和 Enzyme 对其进行测试。该组件接收 children 任何类型的元素。在 touchMove 事件中,根据触摸的方向,活动 child 会相应更改。
有没有一种方法可以在不依赖于实现的情况下测试组件的行为?
您可以做一些事情,例如将 children 包裹在容器中,然后在活动容器上设置 active
className。
// inside your carousel component's render function
{this.props.carouselItems.map((child, i) =>
<div
className={
'container' +
(i === this.state.activeIndex ? ' active' : '')
}
>
{child}
</div>
)}
然后,使用选择器,在您执行各种操作/状态更改时,使用 Enzyme 验证正确的 容器 具有 active
class。
这样,children 组件实际上是什么并不重要,您已经从具有特定 children 的具体实现中抽象出 'activeness' 的测试。
请注意上面使用 CSS classes 的代码只是一个非常简单的示例 - 您还可以通过使用 [=11] 以更 'React' 的方式使用组件=] prop 到容器组件,甚至将它传递给 child
来做一些事情,等等。无论你的用例需要什么。重要的概念是,您以某种方式为 'activeness' 标记每个 child
的容器组件,以便 Enzyme 可以对其进行测试,而无需测试 child
本身的任何具体实现。
另请注意,单元测试本质上是在某种抽象级别上测试实现细节。他们必须。使用此方法,您可以在 child 组件的特定实现级别之上进行抽象,但您仍然只是基于此容器组件模式测试 'activeness' 的具体机制。如果 active
class 只是因为 CSS 坏了,或者你的 child
使用它的方式坏了,怎么办?
在测试 UI 组件时,单元测试的用处非常有限,因为您基本上无法超越具体实现细节的测试。即使使用 Jest 快照之类的东西,您也只是在查看标记是否匹配,而不是标记是否首先正确或在不同浏览器中正确显示。对于 UI,您确实需要将单元测试与自动化功能测试结合起来,当然还有手动测试,以真正确保您确实在测试该组件是否适用于 用户。
我有一个轮播组件,我正在使用 Jest 和 Enzyme 对其进行测试。该组件接收 children 任何类型的元素。在 touchMove 事件中,根据触摸的方向,活动 child 会相应更改。
有没有一种方法可以在不依赖于实现的情况下测试组件的行为?
您可以做一些事情,例如将 children 包裹在容器中,然后在活动容器上设置 active
className。
// inside your carousel component's render function
{this.props.carouselItems.map((child, i) =>
<div
className={
'container' +
(i === this.state.activeIndex ? ' active' : '')
}
>
{child}
</div>
)}
然后,使用选择器,在您执行各种操作/状态更改时,使用 Enzyme 验证正确的 容器 具有 active
class。
这样,children 组件实际上是什么并不重要,您已经从具有特定 children 的具体实现中抽象出 'activeness' 的测试。
请注意上面使用 CSS classes 的代码只是一个非常简单的示例 - 您还可以通过使用 [=11] 以更 'React' 的方式使用组件=] prop 到容器组件,甚至将它传递给 child
来做一些事情,等等。无论你的用例需要什么。重要的概念是,您以某种方式为 'activeness' 标记每个 child
的容器组件,以便 Enzyme 可以对其进行测试,而无需测试 child
本身的任何具体实现。
另请注意,单元测试本质上是在某种抽象级别上测试实现细节。他们必须。使用此方法,您可以在 child 组件的特定实现级别之上进行抽象,但您仍然只是基于此容器组件模式测试 'activeness' 的具体机制。如果 active
class 只是因为 CSS 坏了,或者你的 child
使用它的方式坏了,怎么办?
在测试 UI 组件时,单元测试的用处非常有限,因为您基本上无法超越具体实现细节的测试。即使使用 Jest 快照之类的东西,您也只是在查看标记是否匹配,而不是标记是否首先正确或在不同浏览器中正确显示。对于 UI,您确实需要将单元测试与自动化功能测试结合起来,当然还有手动测试,以真正确保您确实在测试该组件是否适用于 用户。