我觉得大多数组件测试用开玩笑和酶都没有价值,我错了吗?

uee*_*iie 8 javascript testing snapshot jestjs enzyme

我是使用React-Jest-Enzyme进行测试的新手,但是根据我收集到的所有信息,在我看来,大多数测试实际上都会测试React库是否中断,而不是我的实际业务逻辑.

我会给你一些例子,如果我错了,请纠正我:

快照测试:

这个策略有什么用?

从我看到它的主要目的是捕获我的代码的任何不需要的更改.它" stringify "我的组件树,只是注意到是否添加了任何新的换行符,对吧?

所以它主要用于那些我可能会意外按下键盘的情况?或其他人意外地弄乱我的代码?

酶的安装/浅和Jest的

我看到的大多数示例解释了你使用它们的方式是这样的:

const wrapper = mount(<MyComponeny />)
expect(wrapper.find(‘button’).simulate(‘click)).toHaveBeenCalledTime(1)
Run Code Online (Sandbox Code Playgroud)

我能从中获得什么价值?如果我模拟用酶的按钮点击simulate(‘click’),那么我应该期望它会触发点击事件.

我在这里测试的是什么?酶的功能?

还有setState方法酶给我们.如果wrapper.setState({value: ‘some value’)}想改变我的状态,为什么我会看到这样的用例:

wrapper.setState({value: ‘new value’)}
expect(wrapper.state(‘value’)).toBe(‘new value’)
Run Code Online (Sandbox Code Playgroud)

为什么我需要测试测试框架/额外的库?

这一切似乎都有点含糊不清

Vit*_*man 9

快照测试:

所以它主要用于那些我可能会意外按下键盘的情况?或其他人意外地弄乱我的代码?

如果你调整一个通用的组件/服务/实用程序,并且不注意它会影响一些意外的组件,例如.

现在它可以以一种好的方式影响它,例如修复组件中的意外文本 - 但快照使您能够快速查看所有受影响组件的更改.

const wrapper = mount(<MyComponeny />)
expect(wrapper.find(‘button’).simulate(‘click)).toHaveBeenCalledTime(1)
Run Code Online (Sandbox Code Playgroud)

我能从中获得什么价值?

这只是一个简单的例子.这确实是一个非常糟糕的测试 - 它没有测试任何东西.通常你会测试更重要的东西,比如:

toHaveBeenCalledTime(1) 在某种过程中 - 例如,确保网络请求仅在整个点击流和其他触发期间完成一次.

为什么我会看到这样的用例:

wrapper.setState({value: ‘new value’)}
expect(wrapper.state(‘value’)).toBe(‘new value’)
Run Code Online (Sandbox Code Playgroud)

这也是一个简单的示例,向您展示可以在React组件上设置状态.它实际上没有测试任何东西.

你可以做的是在一个组件上设置状态,并确保它呈现适量的孩子或者它呈现你期望的其他一些东西.

这也与快照有关 -

在组件上设置某个状态并创建快照,然后,当您处理此组件使用的服务和实用程序时,您可以确保它不会因该特定状态而中断.