如何在react-number格式上模拟change事件

时间:2018-03-28 00:34:02

标签: javascript reactjs enzyme

我正在尝试模拟更改事件以更改组件中react-number-format组件的valeu。

当我测试组件时,我得到 TypeError:value.replace不是模拟('change',event)方法中的函数

在测试组件内呈现NumberFormat组件:

<NumberFormat
  id="estimateLineQty"
  name="estimateLineQty"
  className="form-control input-sm"
  value={this.state.estimateLineQty}
  thousandSeparator=" "
  decimalSeparator=","
  decimalScale={2}
  onValueChange={values => {
    const { formattedValue, floatValue } = values;
    const newPrice = floatValue * this.state.estimateLineUnitPrice;
    this.setState({
      estimateLineQty: formattedValue,
      estimateLinePrice: newPrice
    });
  }}
/>

测试:

it.only('updates estimateLinePrice when changing estimateLineQty value', () => {
  const props = estimateLineProps.line;
  const wrapper = mount(<EstimateLine {...props} />);
  const inputQty = wrapper.find('NumberFormat[name="estimateLineQty"]');
  const inputUnitPrice = wrapper.find('NumberFormat[name="estimateLineQty"]');
  const inputPrice = wrapper.find('NumberFormat[name="estimateLinePrice"]');
  const oldQty = inputQty.instance().props.value;
  const newQty = oldQty + 2;
  const event = {
    target: { value: newQty }
  };
  inputQty.simulate('change', event);
  expect(inputPrice.instance().props.value).not.toEqual(oldQty);
  expect(inputPrice.instance().props.value).toEqual(
    newQty * inputUnitPrice.instance().props.value
  );
});

如何在NumberFormat组件上模拟更改事件并更改其值?

谢谢。

3 个答案:

答案 0 :(得分:0)

方法     wrapper.find(&#39; NumberFormat的[名称=&#34; estimateLineQty&#34;]&#39)

回复你一个List,你需要做这样的事情:     inputQty.at(0) 获得属性和     inputQty.get(0) 模拟。

希望这对你有所帮助。

答案 1 :(得分:0)

您只能在原生HTML输入上使用.simulate('change', event);

在您的情况下,您应该直接调用该方法:

inputQty.instance().onValueChange(yourTestValues);

答案 2 :(得分:0)

我终于明白了:

inputQty.instance().props.onValueChange(yourTestValues);