我是 React-Jest-Enzyme 测试的新手,但是从我收集的所有信息来看,我认为大多数测试都会测试如果React库中断了,而不是我的实际业务逻辑。
我会给你一些例子,如果我错了,请纠正我:
这个策略有什么用?
从我看到它的主要目的是捕获对我的代码的任何不必要的更改。它“ stringify ”我的组件树,只是注意到是否添加了任何新的换行符,对吧?
所以它主要用于那些我可能会意外按下键盘的情况?或者其他人意外地弄乱了我的代码?
我看到的大多数例子都解释了你使用它们的方式:
const wrapper = mount(<MyComponeny />)
expect(wrapper.find(‘button’).simulate(‘click)).toHaveBeenCalledTime(1)
我能从中获得什么价值?
如果我用酶simulate(‘click’)
模拟按钮点击,那么我预计它会触发点击事件。
我在这里测试的是什么?酶的功能?
也是setState方法酶给我们的。
如果wrapper.setState({value: ‘some value’)}
想改变我的状态,为什么我会看到这样的用例:
wrapper.setState({value: ‘new value’)}
expect(wrapper.state(‘value’)).toBe(‘new value’)
为什么我需要测试测试框架/额外的库?
这一切似乎都有些含糊不清
答案 0 :(得分:9)
快照测试:
所以它主要用于那些我可能会意外压迫我的情况 键盘?或者其他人意外地弄乱了我的代码?
如果您调整一个通用组件/服务/实用程序,并且没有注意到它会影响某些意外组件。
现在它可以很好地影响它,例如修复组件中的意外文本 - 但快照使您能够快速查看所有受影响组件的更改。
const wrapper = mount(<MyComponeny />) expect(wrapper.find(‘button’).simulate(‘click)).toHaveBeenCalledTime(1)
我能从中得到什么价值?
这只是一个简单的例子。这确实是一个非常糟糕的测试 - 它没有测试任何东西。通常你会测试更重要的东西,如:
toHaveBeenCalledTime(1)
在某种过程中 - 例如,确保网络请求仅在整个点击流和其他触发期间完成一次。
为什么我会看到这样的用例:
wrapper.setState({value: ‘new value’)} expect(wrapper.state(‘value’)).toBe(‘new value’)
这也是一个简单的示例,向您展示可以在React组件上设置状态。它实际上并没有测试任何东西。
您可以做的是在组件上设置状态,并确保它呈现适当数量的子项,或者它会呈现您期望的其他内容。
这也与快照有关 -
在组件上设置某个状态并创建快照,然后,当您处理此组件使用的服务和实用程序时,您可以确保它不会因该特定状态而中断。