我无法测试以下代码的onClick。我一直收到以下错误:
Method “simulate” is meant to be run on 1 node. 0 found instead.
我的组件代码如下所示:
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:
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);
});我怎样才能通过下面的测试呢?
发布于 2019-02-21 10:25:44
由于您使用的是css模块,因此实际呈现的DOM将不包含带有quick-filter-div类的div。取而代之的是,类将类似于quick-filter-div__012xyz。因此,wrapper.find('.quick-filter-div')将返回0个节点。
您可以通过在测试中将以下行放在setState行之后来验证这一点:
expect(wrapper.find('.quick-filter-div').exists()).toEqual(false)但是,看起来你想要测试的是div.quick-filter-div内部button的点击。是不是这样?毕竟,onClick处理程序是button而不是div的支柱。
而且,因为您的button已经被赋予了一个id,所以您可以这样做:
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,但是你知道你想要测试的按钮点击是第一个按钮(而不是第二个),那么你可以尝试:
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);
});发布于 2019-02-28 21:13:05
必须在jest.fn函数中添加一个return new Promise
//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");https://stackoverflow.com/questions/54797892
复制相似问题