reactjs - 我将如何测试组件 Prop 是否等于另一个 Prop 功能?

标签 reactjs testing components enzyme

我有一个组件,它有一个 prop 调用传递一个值的 prop 函数。 如何使用 enzyme 编写测试?


<LabeledInput
                name='zip'
                onChange={this.props.onChange}
                onBlur={() => this.props.onBlur('zip')}
              />
beforeEach(() => {
    props = {
      onChange: sinon.spy(),
      onBlur: sinon.spy(),
    };
    wrapper = shallowWithIntl(<ContactCard {...props}/>);
  });
it('should call onChange prop', () => {
    const labeledInputs = wrapper.find(LabeledInput);
    let zipInput = labeledInputs.filterWhere(input => input.props().name === 'zip');
    expect(zipInput.props().onChange).to.equal(props.onChange);
  });

  it('should onBlur prop ', () => {
    const labeledInputs = wrapper.find(LabeledInput);
    let zipInput = labeledInputs.filterWhere(input => input.props().name === 'zip');
    expect(zipInput.props().onBlur).to.equal(props.onBlur);
  });

第一个(onChange 测试)有效。 第二个给出错误“AssertionError: expected [Function: onBlur] to equal [Function: proxy]”

最佳答案

您正在比较 2 个不同的函数引用并试图断言它们相等。

onBlur={() => this.props.onBlur('zip')} 创建一个新的函数引用,然后调用 this.props.onBlur('zip')

在您的断言中,您正在尝试匹配 () => this.props.onBlur('zip') === this.props.onBlur('zip') 这将始终为 false .

FWIW [Function: proxy] 用于 spy 功能。

可能的修复,可能会在 onBlur prop 上寻找 toHaveBeenCalled 并使用这种方式断言。

在 Sinon 世界中,似乎使用以下三种之一:

  • expect(props.onBlur.called).to.equal(true);
  • sinon.assert.called(props.onBlur);
  • assert(props.onBlur.called);

关于reactjs - 我将如何测试组件 Prop 是否等于另一个 Prop 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56261074/

相关文章:

c# - 需要帮助确定要编写的单元测试

delphi - 如何销毁动态创建的Tchromium(Delphi)组件?

javascript - 如何与组件的聚合交互

javascript - 如何在通量中设置ajax数据获取?

javascript - axios Post请求没有React功能

css - 内部元素滚动上的 Antd 选择和自动完成列表元素 'stick'

javascript - 从容器访问组件状态 AG Grid

reactjs - (FSEvents.framework) FSEventStreamStart : register_with_server: ERROR: f2d_register_rpc() => (null) (-22)

python - 如何将脚本作为pytest测试运行

ruby-on-rails - React with Rails 5.1 将数据库对象调用到 React 组件中