【问题标题】:Testing a Function within React JS Jest Testing在 React JS Jest 测试中测试一个函数
【发布时间】:2018-08-31 17:41:23
【问题描述】:

我正在 Jest 中进行测试,并且正在寻找一种方法来测试具有更改的特定函数,因此我需要让测试模拟更改。

这是我的测试

it('Expect HandleFilterChange', () => {
    const handleFilterChange = jest.fn();
    handleFilterChange();
    const handleChange = wrapper.find("noJava8")
    console.log("this is what Handle Change Equals ",handleChange)
    expect(handleChange).toEqual("")
    handleChange.simulate('lowCodeCoverage', { handleFilterChange: 27 });
    expect(store.getActions()[0]).to.deep.equal(noJava8);
    expect(handleFilterChange).toHaveBeenCalled()
 })

这是我的代码

handleChange = name => event => { console.log(name)
var options = {lowCodeCoverage: this.props.lowCodeCoverage, noBasePOM: this.props.noBasePOM, noJava8: this.props.noJava8};
options[name] = event.target.checked;
this.props.handleFilterChange(options);
console.log(this.handleChange)

};

<FormControlLabel
                  control={<Checkbox checked={this.props.lowCodeCoverage} 
onChange={this.handleChange('lowCodeCoverage')} 
value="lowCodeCoverage" color="primary" />}
                  label={I18n.t('filters.low-code-coverage')}
                />
                <FormControlLabel




 <WithStyles(FormControl) component="filter-options">
        <WithStyles(FormGroup)>
          <WithStyles(FormControlLabel) id="lowCodeCoverage" control={{...}} label="low-code-coverage" />
          <WithStyles(FormControlLabel) id="noBasePom" control={{...}} label="no-base-pom" />
          <WithStyles(FormControlLabel) id="noJava8" control={{...}} label="no-java-8" />
        </WithStyles(FormGroup)>

【问题讨论】:

  • 这里的浅渲染怎么样?
  • wrapper = shallow() 它在上面的文件中定义
  • 也添加你的渲染方法代码
  • 将其添加到原始问题中

标签: javascript reactjs function unit-testing jestjs


【解决方案1】:

你可以像这样模拟change事件:

如果noJava8 是FormControlLabel 的id,这是我的假设。

const handleChange = jest.fn();
wrapper = shallow(<FilterOptions.WrappedComponent handleChange= {handleChange}  />).dive();
wrapper.find('#noJava8').simulate('change');
expect(handleChange).toHaveBeenCalled();

此测试将通过。

【讨论】:

  • 我收到了这个错误方法“模拟”只意味着在单个节点上运行。找到了 0 个。
  • 你在formLabel上添加id了吗?
  • 补充说,现在我收到这个“预期的模拟函数已被调用,但它没有被调用。”
  • 编辑了我的答案。是change 而不是click
  • 仍然出现同样的问题。
猜你喜欢
  • 2014-10-21
  • 2022-01-06
  • 2021-08-08
  • 2015-07-19
  • 1970-01-01
  • 2018-02-24
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多