React native 如何在react本机弹出菜单中进行单元测试行为

React native 如何在react本机弹出菜单中进行单元测试行为,react-native,react-native-popup-menu,React Native,React Native Popup Menu,假设我有下面的代码: <Menu> <MenuTrigger text='Select action' /> <MenuOptions> <MenuOption onSelect={() => funcOne()} text='Call funcOne' /> <MenuOption onSelect={() => funcTwo()} text='Call funcTwo' /> </Me

假设我有下面的代码:

<Menu>
  <MenuTrigger text='Select action' />
  <MenuOptions>
    <MenuOption onSelect={() => funcOne()} text='Call funcOne' />
    <MenuOption onSelect={() => funcTwo()} text='Call funcTwo' />
  </MenuOptions>
</Menu>

funcOne()}text='Call funcOne'/>
funcTwo()}text='Call funcTwo'/>
现在如何单元测试(使用酶)第一个
菜单选项的
onSelect
是否调用
funcOne
,第二个
菜单选项的
onSelect
是否调用
funcTwo


文档中的测试示例没有太大帮助,因为没有与检查行为相关的示例。

您可以根据您在funcOne()和funcTwo()函数中的具体操作来测试它。举个例子,假设您正在更改消息的状态,那么您可以测试状态值是否已更改

在组件中初始化

this.state = {
  message: ""
}
你已经在一个地方改变了

funcOne() {
 .....
 this.setState({message: "funcOne"});
 ... 
}
因为你有两个菜单选项组件,你可以给他们测试

<Menu>
  <MenuTrigger text='Select action' />
  <MenuOptions>
    <MenuOption testID={"MenuOption1"} onSelect={() => funcOne()} text='Call funcOne' />
    <MenuOption testID={"MenuOption2"} onSelect={() => funcTwo()} text='Call funcTwo' />
  </MenuOptions>
</Menu>

funcOne()}text='Call funcOne'/>
funcTwo()}text='Call funcTwo'/>
现在你可以这样测试了

const wrapper = shallow(<Menu/>);
expect(wrapper.state().message).toEqual("");
wrapper.find('MenuOption[testID="MenuOption1"]').simulate("Select");
expect(wrapper.state().message).toEqual("funcOne");
const wrapper=shallow();
expect(wrapper.state().message).toEqual(“”);
find('MenuOption[testID=“MenuOption1”]”)。simulate(“Select”);
expect(wrapper.state().message).toEqual(“funcOne”);

同样,MenuOption2也可以进行测试。

它是一个无状态组件。如何测试在模拟第一个菜单选项的Select事件后调用了funcOne?funcOne()的具体功能是什么?也请参考这一次。有没有一种方法可以模拟实现onSelect的菜单选项?是的,有,请参考评论中的上述链接