我正在安装一个包含其他组件的组件,如下所示:
const wrapper = mount(<IntlProvider><SignUpForm /></IntlProvider>);
组件<SignUpForm />
的初始状态应为{errors: {}}
。我使用以下断言:
expect(wrapper.find(SignUpForm).state('errors')).to.equal({});
但运行测试时收到以下错误:
错误:只能在根
上调用ReactWrapper :: state()
那么,我如何访问<SignUpForm />
组件的状态?
答案 0 :(得分:2)
嗯,你不能用酶来做到这一点(据我所知),但是有一个很好的理由 - 单元测试应该测试应用程序的一些独立部分(在一个测试中从不测试两个部分) )。此Provider实际上是一个组件,因此您尝试测试子组件安装父组件...
同样的问题是当你有组件连接到redux商店时,你可以将它们包装在Provider中,但事实并非如此。您应该将组件与包装版本分开,然后仅测试与第三方/父/兄弟分离的组件。
我从一个文件导出组件和连接组件(两个导出,一个命名,一个默认),在测试中我只导入命名(未连接)组件。我真的不想测试redux提供商;)
//component.jsx
export function MyComp() {}
export default connect()(MyComp)
//component.test.js
import {MyComp} from "./component"
//another component
import MyComp from "./component"