use*_*695 5 javascript unit-testing reactjs jestjs
我正在尝试对我的React组件使用Jest / Enzyme进行一些单元测试。
但是我在传递给第二个组件的函数时遇到了问题。我不知道是否必须测试或模拟此功能。如果我必须模拟它,我不知道如何针对某个函数执行该操作。
父组件
export default class Parent extends Component {
togglePosition (term, event) {
this.setState({
top: term.length >= 3
})
}
render () {
return (
<div>
<Child togglePosition={this.togglePosition} />
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
子组件
export default class Child extends Component {
handleChange (event) {
const term = event.target.value
this.props.togglePosition(term) // <-- Test/mock it?
this.setState({
loading: 'loading',
term
})
}
render () {
return (
<div>
<Input id="target-input" onChange={this.handleChange} />
</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我对Child组件进行测试的方法-testing handleChange:
单元测试(儿童)
it('handleChange() should set state.term', () => {
const event = { target: { value: 'test' } }
const wrapper = shallow(<Child />)
wrapper.find('#target-input').simulate('change', event)
const state = wrapper.instance().state
expect(state).toEqual({ loading: 'loading', term: 'test' })
})
Run Code Online (Sandbox Code Playgroud)
出现此错误: TypeError: this.props.togglePosition is not a function
未经实际测试,我相信这就是您所需要的:
it('handleChange() should set state.term', () => {
const togglePosition = jest.fn();
const event = { target: { value: 'test' } };
const wrapper = shallow(<Child togglePosition={togglePosition} />);
wrapper.find('#target-input').simulate('change', event);
const state = wrapper.instance().state;
expect(state).toEqual({ loading: 'loading', term: 'test' });
expect(togglePosition).toHaveBeenCalledWith('test');
})
Run Code Online (Sandbox Code Playgroud)
模拟传递的函数:const togglePosition = jest.fn();,并测试条件/响应:expect(togglePosition).toHaveBeenCalledWith('test');。
| 归档时间: |
|
| 查看次数: |
2064 次 |
| 最近记录: |