reactjs - 使用 Enzyme 和 Jest 在 React 中测试 handle change 函数

标签 reactjs testing jestjs state enzyme

我的 react 组件包含这段代码

 handleChange = e => {
    this.setState({
      num: e.target.value
    });
  };

  render() {
    return (
      <div>
        <h2>Delete cat :(</h2>
        <input
          onChange={this.handleChange}
          type="number"
          placeholder="enter id here"
        />
        <button id="deleteBtn" onClick={this.deleteOne}>
          Delete
        </button>
      </div>
    );
  }
}

如您所见,handleChange 函数在输入更改时触发,并从那里更新状态。

我如何使用 Enzyme 对此进行测试?我试过了

 it("Updates the state", () => {
     const wrapper = shallow(
       <Provider store={store}>
         <DeleteOne />
       </Provider>
     );
     const input = wrapper.find("input");

     input.simulate("change", { target: { num: 2} });

     expect(wrapper.state().num).toEqual(2);
   });
});

我不得不尝试将它包装在商店中,因为我正在使用 Redux 并导出连接的组件。过去一个小时我一直在谷歌搜索并尝试了各种方法,但未能通过该测试。请发送帮助:)干杯

PS:我已经测试了按钮点击不用担心,因为它只是运行一个函数(没有状态更新)。

最佳答案

我通常会导出连接的组件以供在应用中使用,并导出组件本身以进行测试。

看起来你有一个小错字,传递 { target: { value: 2 } } 作为你的事件。

这是一个基于您提供的代码的工作示例:

import * as React from 'react';
import { shallow } from 'enzyme';

class DeleteOne extends React.Component {

  handleChange = e => {
    this.setState({
      num: e.target.value
    });
  };

  render() {
    return (
      <div>
        <h2>Delete cat :(</h2>
        <input
          onChange={this.handleChange}
          type="number"
          placeholder="enter id here"
        />
        <button id="deleteBtn" onClick={this.deleteOne}>
          Delete
      </button>
      </div>
    );
  }
}

it("Updates the state", () => {
  const wrapper = shallow(<DeleteOne />);
  const input = wrapper.find("input");
  input.simulate("change", { target: { value: 2 } });  // 'value' instead of 'num'
  expect(wrapper.state().num).toEqual(2);  // SUCCESS
});

关于reactjs - 使用 Enzyme 和 Jest 在 React 中测试 handle change 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920392/

相关文章:

reactjs - 如何有条件地禁用 react 中的表单输入?

javascript - 类型错误 : Cannot read property 'length' of undefined in reactjs

java - 与用于 Selenium 对象模式设计的 Robot 框架的关键字管理集成

testing - 我必须写一个商业案例来为我们的团队批准一个测试员。关注什么?

testing - 负载测试 - 运行负载测试时套接字连接中止

docker - 来自 docker 的调试 Jest

javascript - 如何在node.js和express上的Restful API中设置编码UTF-8或WINDOWS_CP_1251

reactjs - 如何使用 Redux 和 ReactJS 等声明式/函数式样式库来处理焦点?

angular - 意外的 token 导出开 Jest

javascript - 无法使用 shallowMount 创建组件,vm.$refs ['VTU_COMPONENT' ] 未定义