ShallowWrapper::state() can only be called on the root
可能不是问题,因为测试值最好在单元测试中硬编码。最好是让测试在应该通过的地方意外失败,而不是让它在应该失败的地方意外通过,前者更容易调试和修复。
尽管获得组件状态可能会有好处,至少对于断言是这样。
const layoutWrapper = mount(<Layout/>);
const appWrapper = layoutWrapper.find(App).dive();
expect(appWrapper.state('isSidebarOpen')).toBe(false);
expect(appWrapper.first(Sidebar).props('isOpen').toBe(false);
appWrapper.setState({ isSidebarOpen: true });
expect(appWrapper.state('isSidebarOpen')).toBe(true);
expect(appWrapper.first(Sidebar).props('isOpen').toBe(true);
该部件中有很多活动部件,建议使用
mount
而不是
shallow
. 提供细粒度的隔离测试,即测试,可能是有益的。
render
单独支撑:
const layoutWrapper = mount(<Layout/>);
const appWrapper = layoutWrapper.first(App);
const Child = appWrapper.prop('render');
const childWrapper = shallow(<Child isSidebarOpen={false} ... />);
expect(childWrapper.find(Sidebar).props('isOpen').toBe(false);
...
以及如何
App
状态与
提供
支柱应在专用设备中进行测试。
应用程序
元件测试。