首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >simulate/ onClick :方法“simulate”将在1个节点上运行。已找到0

simulate/ onClick :方法“simulate”将在1个节点上运行。已找到0
EN

Stack Overflow用户
提问于 2019-02-21 09:33:09
回答 2查看 4.7K关注 0票数 2

我无法测试以下代码的onClick。我一直收到以下错误:

Method “simulate” is meant to be run on 1 node. 0 found instead.

我的组件代码如下所示:

代码语言:javascript
复制
constructor (props) {
  super(props)
  this.state = INITIAL_STATE;
}

handleQuickFilter = (type) => {
  this.setState({
    quickFilterObj: {...this.state.quickFilterObj, [type]: {...this.state.quickFilterObj[type], checked: !this.state.quickFilterObj[type].checked}}
    }, () => {
      let filter = this.buildFilter();
      filter ? 
        linker.UniversalGrid('Counterparty.Loa.Enrollment', '', `{form_filter}=$filter=(${filter}),{grid_selectable}=1,{can_add}=1`) 
      :
        linker.UniversalGrid('Counterparty.Loa.Enrollment', '', `{form_filter}='',{grid_selectable}=1,{can_add}=1`)
  })
}

render () {
  return(
    <div className='enrollment-grid-wrapper'>   
      <div className='quick-filter-div'>
        <button className={this.state.quickFilterObj['New'] && this.state.quickFilterObj['New'].checked ? 'checked quick-filter' : 'unchecked quick-filter'} 
                id = 'testnew'
                onClick={() => {this.handleQuickFilter('New')}}
                >
            New {this.state.quickFilterObj['New'] && this.state.quickFilterObj['New'].count !== undefined ? `(${this.state.quickFilterObj['New'].count})` : null}
        </button>
        <button className={this.state.quickFilterObj['Sent'] && this.state.quickFilterObj['Sent'].checked ? 'checked quick-filter' : 'unchecked quick-filter'} 
                onClick={()=>{this.handleQuickFilter('Sent')}}
                >
            Sent {this.state.quickFilterObj['Sent'] && this.state.quickFilterObj['Sent'].count !== undefined ? `(${this.state.quickFilterObj['Sent'].count})` : null}
        </button>
  )
}

我尝试了以下方法,使用Jest / enzyme:

代码语言:javascript
复制
it("should HandlequickFilter with button click", () => { 
  wrapper.setProps({}); 
  wrapper.setState({quickFilterObj:"test"}); 
  wrapper.find('.quick-filter-div').at(0).simulate("click");
  expect(wrapper.state().quickFilterObj.New.checked).toEqual(true);
});

我怎样才能通过下面的测试呢?

EN

回答 2

Stack Overflow用户

发布于 2019-02-21 10:25:44

由于您使用的是css模块,因此实际呈现的DOM将不包含带有quick-filter-div类的div。取而代之的是,类将类似于quick-filter-div__012xyz。因此,wrapper.find('.quick-filter-div')将返回0个节点。

您可以通过在测试中将以下行放在setState行之后来验证这一点:

代码语言:javascript
复制
expect(wrapper.find('.quick-filter-div').exists()).toEqual(false)

但是,看起来你想要测试的是div.quick-filter-div内部button的点击。是不是这样?毕竟,onClick处理程序是button而不是div的支柱。

而且,因为您的button已经被赋予了一个id,所以您可以这样做:

代码语言:javascript
复制
it("should HandlequickFilter with button click", () => { 
  wrapper.setProps({}); 
  wrapper.setState({quickFilterObj:"test"}); 
  const button = wrapper.find('button#testnew') // find button based on id selector
  expect(button.exists()).toEqual(true)         // make sure button is found
  button.simulate("click");                     // simulate click
  expect(wrapper.state().quickFilterObj.New.checked).toEqual(true);
});

如果你没有给你的按钮一个id,但是你知道你想要测试的按钮点击是第一个按钮(而不是第二个),那么你可以尝试:

代码语言:javascript
复制
it("should HandlequickFilter with button click", () => { 
  wrapper.setProps({}); 
  wrapper.setState({quickFilterObj:"test"}); 
  const buttons = wrapper.find('button')        // find all buttons
  expect(buttons).toHaveLength(2)               // make sure you found 2 buttons
  const button = buttons.at(0)                  // get the first button
  button.simulate("click");                     // simulate click
  expect(wrapper.state().quickFilterObj.New.checked).toEqual(true);
});
票数 0
EN

Stack Overflow用户

发布于 2019-02-28 21:13:05

必须在jest.fn函数中添加一个return new Promise

代码语言:javascript
复制
//mocking functions
getSelectedLOAs  = jest.fn( () => {
return new Promise((resolve, reject) => {
resolve()
})
});


it("should test click event NEW  method", () => {
wrapper.setProps({
});
wrapper.find('COMPONENT').setState({ 
  quickFilterObj:{
    New: {
      checked: true
    },
    Sent: {
      checked: true
    },

   }, } );
wrapper.update();
wrapper.find('#New-testclick').simulate("click");
wrapper.find('#Sent-testclick').simulate("click");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54797892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档