我最近开始编程。我所在的团队使用 React 进行编程,并使用 Enzyme、Mocha 和 Chai 进行单元测试。请参阅下面的软件包版本。
当测试一个组件时,有多个用例需要不同的 prop 值,我应该在每个测试中使用 beforeEach() 然后 setProps() ,还是应该在开始时执行显式 mount() (或shallow())每次测试?有关系吗?
例如,我可以使用 beforeEach() 在没有任何 props 的情况下挂载,然后在每个测试中使用 setProps() ,如下所示(使用伪代码):
describe('MyComponent', () => {
beforeEach(... let component = mount(<MyComponent />) ...)
it('tests use case 1', () => {
// set prop A = 123
component.setProps({A: 123})
// assert some stuff
})
it('tests use case 2, () => {
// set prop A = 456 and B = 'foo'
component.setProps({A: 456})
component.setProps({B: 'foo'})
// assert some stuff
})
})
或者我可以在每个测试开始时进行特定于用例的安装,在安装中传递 props,如下所示:
describe('MyComponent', () => {
it('tests use case 1', () => {
...mount(<MyComponent A=123 />)
// assert some stuff
})
it('tests use case 2, () => {
...mount(<MyComponent A=456 B='foo' />)
// assert some stuff
})
})
每种方法的优点和缺点是什么?有最佳实践吗?
Packages
- "酶": "^3.3.0",
- "enzyme-adapter-react-16": "^1.1.1",
- "摩卡": "^5.0.0",
- “柴”:“3.5.0”
对于类组件有componentDidMount
and constructor
而对于功能组件来说,有useEffect(..., [])
。所有这些事情都只被调用一次。
另一方面,对于方法 #2,仍然需要在单独的测试用例中测试 props 更新,以确保组件正确处理该问题。否则,当在不同的环境中使用相同的组件时,您可能会错过这种情况<Route>
不获取导航数据(发生在componentDidMount
only)
说如果你有
<Route path="/Album/:id/author" component={UserScreen} />
<Route path="/user/:id/" component={UserScreen} />
如果您可以直接从第一个导航到第二个,则意味着 React-Router 将不会重新创建UserScreen
但只是更新已经渲染的实例。因此,使用方法#1,您将通过自动测试来覆盖这种情况。虽然方法 #2 需要您进行测试componentDidUpdate
行为明确。
我不确定哪个更好,但想强调测试流程和实际项目流程之间可能会发生差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)