测试wrapper.props浅渲染未定义

时间:2018-10-09 23:08:11

标签: reactjs react-native chai enzyme

我要测试以下代码:

<React.Fragment>
    <Connect />
    <FlatList
        data={[
            {key: "pp", title: "Privacy Policy"},
            {key: "tos", title: "Terms of Service"},
        ]}
        renderItem={({item}) => {
            return (
                <View
                    onPress={() => this.handleOnPress(item.key)}
                >
                    <Text>{item.title}</Text>
                </View>
            );
        }}
    />
</React.Fragment>

这些是我的测试

it("should render a FlatList with 2 items", () => {
        const wrapper = shallow(
            <Menu
            />
        );
        expect(wrapper).toMatchSnapshot();
        expect(wrapper.props().data).toHaveLength(2);
    });

由于某种原因,它失败并且显示.data未定义。我基本上想测试我的平面清单有2个项目。

1 个答案:

答案 0 :(得分:1)

如果我了解问题所在,那么看来您正在尝试获取.props()(包装器)的<Menu/>,而不是<FlatList/>的子项。包装器。

通过使用.childAt方法,您应该可以通过以下方法解决问题:

it("should render a FlatList with 2 items", () => {
    const wrapper = shallow(
        <Menu
        />
    );
    expect(wrapper).toMatchSnapshot();

    // expect(wrapper.props().data).toHaveLength(2);

    expect(
      wrapper // the wrapper of 'Menu'
      .childAt(1) // the second child of the 'Menu' which is the 'FlatList'
      .props() // the props of 'FlatList'
      .data // the data field of 'FlatList' props
    ).toHaveLength(2);
});

Here is more information on the .childAt() method-希望对您有帮助