【发布时间】:2016-04-11 13:59:34
【问题描述】:
当元素出现在 DOM 中或离开 DOM 时,我正在使用 CSSTransitionGroup 为元素设置动画。效果很好。
现在 - 我想对这个组件进行单元测试。我正在创建一个临时 DOM 节点并将其附加到 <body>,我将组件渲染到其中,然后执行一些操作。因此,我希望子 DOM 节点会消失。
问题: 应用动画类,组件保存在 DOM 中,直到 CSS 动画结束。这意味着我的测试也应该等待几百毫秒,然后我才能断言该元素已消失。我不能那样做 - 我希望我的测试很快,因为这些是单元测试。
问题: 有没有办法在不向我的组件添加额外选项的情况下禁用 CSS 过渡?
我尝试了什么:
单元测试本身运行良好。我可以通过将参数传递给我的组件来摆脱动画,这将使它不使用CSSTransitionGroup。所以 - 最坏的情况 - 我会这样做。但我正在寻找更好的解决方案。
我还可以断言“-enter”/“-enter-active”/“-leave”/“-leave-active”类存在于相关元素上。不过,这似乎有点 hacky,因为我可以想象应用这些类的错误,但元素将保留在 DOM 中。我不想采用这种方法。
【问题讨论】:
-
你可以模拟这个组件。如果你使用 Jest,你可以使用
ReactTestUtils.mockComponent。我不会费心直接测试CSSTransitionGroup的功能。 -
在运行测试时如何修补反应组件?然后你在那里禁用 CSSTransitionGroup。
-
我最终做到了@AdamGoldman。你提醒我我应该在这里回答我自己的问题。
标签: unit-testing reactjs reactcsstransitiongroup