【发布时间】:2020-01-06 04:38:58
【问题描述】:
onSubmit = (e) => {
e.preventDefault()
const errors = this.validateForm()
if (!errors) {
const { handleSubmit } = this.props
handleSubmit(e)
}
}
<---------- unit test --------->
it('calls onSubmit prop function when form is submitted', () => {
const onSubmit = jest.fn()
const handleSubmit = jest.fn()
const wrapper1 = mount(<Form handleSubmit={handleSubmit} onSubmit=
{onSubmit} />)
const form = wrapper1.find('form')
form.simulate('submit')
expect(onSubmit).toHaveBeenCalledTimes(1)
})
<----------- HTML ----------->
<Form
onSubmit={this.onSubmit}
render={() => (
<form onSubmit={this.onSubmit} id="submit-form">
<div>
<label>{countryName}</label>
</div>
<input type="submit" id="submit-form" className="invisible" />
</form>
)}
/>
上面的代码 sn-p 是呈现 HTML 的示例,onSubmit 是用户提交表单时调用的函数。
基本上,这个组件是通用表单组件,因此 handleSubmit 是从 props 中的父组件发送的,并且通过我添加的单元测试它会生成错误 Expected mock function to have been called one time, but it was called zero times.
如果我将 handleSubmit 删除为:
it('calls onSubmit prop function when form is submitted', () => {
const onSubmit = jest.fn()
const wrapper1 = mount(<Form onSubmit=
{onSubmit} />)
const form = wrapper1.find('form')
form.simulate('submit')
expect(onSubmit).toHaveBeenCalledTimes(1)
})
它会产生TypeError: handleSubmit is not a function 错误。
【问题讨论】:
标签: reactjs unit-testing mocking jestjs enzyme