【问题标题】:How to simulate press of React Native Switch component using Jest and Enzyme [duplicate]如何使用 Jest 和 Enzyme 模拟 React Native Switch 组件的按下 [重复]
【发布时间】:2018-10-19 03:33:58
【问题描述】:

我正在尝试测试一个 React Native 组件,它基本上是 Switch 的包装器。

看起来像这样(样式和额外代码已删除):

  render() {
    return (
      <View>
        <View>
          <View>
            <Switch
              onValueChange={() => this.onChange(!this.state.value)}
              value={this.state.value}
            />
          </View>
        </View>
      </View>
    );
  }

这个组件没有onChange 方法本身,但是它扩展的类有。我想确保当我点击此 Switch 时,onChange 会以正确的值被调用(即true 或false)。

我的测试看起来像这样(我添加了一个模拟的onChange 方法,以便更容易测试新闻的动作):

  it('calls onChange with proper values when pressed', () => {
    const onChangeHandler = jest.fn();
    const wrapper = shallow(
      <Toggle />
    );

    wrapper.instance().onChange = onChangeHandler;
    wrapper.simulate('press');


    expect(wrapper.instance().onChange).toBeCalledWith(true);
  });

但是,此测试失败,并且未调用 onChange。我不确定我的测试中的错误在哪里。

【问题讨论】:

标签: react-native jestjs enzyme


【解决方案1】:

我发现我不需要模拟按下,而是可以模拟onValueChange(即按下切换按钮时触发的东西)。

首先我在我的测试中找到我的Switch 组件,使用我给它的testID 属性:

const Switch = wrapper.find('[testID="switch"]');

然后我用它来模拟印刷机并模拟 onChange:

Switch.simulate('valueChange');

这基本上与测试印刷机的结果相同,并且对我有用!

【讨论】:

  • 这仅适用于 Switch 而不适用于其他组件,因此充其量只是一种解决方法。
  • 是的,当然……这个问题专门针对 Switch 组件,答案提供了一个可行的解决方案并被接受……所以这不是解决方法。
猜你喜欢
  • 1970-01-01
  • 2017-05-18
  • 2022-01-19
  • 2017-07-16
  • 2017-04-13
  • 2019-05-12
  • 2019-11-02
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多