我尝试使用 Jest for React-Native 测试 Animated.View
。当我将属性 visible
设置为 true 时,它应该使我的视图从 opacity 0
到 opacity 1
.359– 动画化
这是我的组件呈现的内容:
<Animated.View
style={{
opacity: opacityValue,
}}
>
<Text>{message}</Text>
</Animated.View>
其中 opacityValue
在道具 visible
更改时更新:
Animated.timing(
this.opacityValue, {
toValue: this.props.visible ? 1 : 0,
duration: 350,
},
).start(),
当我设置属性 visible=true
时,我想确保我的视图可见。尽管视图变得可见需要一些时间,并且随着测试运行,不透明度等于 0
。
这是我的测试吧:
it('Becomes visible when visible=true', () => {
const tree = renderer.create(
<MessageBar
visible={true}
/>
).toJSON();
expect(tree).toMatchSnapshot();
});
我在想我怎么能让 Jest 等呢?或者我如何测试它以确保当我将道具设置为 true 时视图变得可见?
谢谢。
原文由 alexmngn 发布,翻译遵循 CC BY-SA 4.0 许可协议
我通过为测试创建一个动画存根解决了这个问题。
我看到您正在使用 visible 作为属性,所以一个有效的例子是:
组件代码
现在开始测试
现在生成的快照将具有预期的不透明度值。如果你经常使用动画,你可以将你的模拟移动到
js/config/jest
并编辑你的 package.json 以在你的所有测试中使用它,然后对你的存根所做的任何更改都将适用于所有测试。编辑:
上面的解决方案只解决了从头到尾的问题。更细粒度的解决方案是:
global.requestAnimationFrame = null
时间旅行功能将是
由于动画内部行为,将步骤分成小块很重要。