我已经查看了各种解决测试类属性的建议,但没有成功,并且想知道是否有人可以更多地了解我可能出错的地方,这是我尝试过的所有测试,但都出现错误 Expected mock函数已经被调用,但它没有被调用。
搜索.jsx
import React, { Component } from 'react'
import { func } from 'prop-types'
import Input from './Input'
import Button from './Button'
class SearchForm extends Component {
static propTypes = {
toggleAlert: func.isRequired
}
constructor() {
super()
this.state = {
searchTerm: ''
}
this.handleSubmit = this.handleSubmit.bind(this)
}
handleSubmit = () => {
const { searchTerm } = this.state
const { toggleAlert } = this.props
if (searchTerm === 'mocky') {
toggleAlert({
alertType: 'success',
alertMessage: 'Success!!!'
})
this.setState({
searchTerm: ''
})
} else {
toggleAlert({
alertType: 'error',
alertMessage: 'Error!!!'
})
}
}
handleChange = ({ target: { value } }) => {
this.setState({
searchTerm: value
})
}
render() {
const { searchTerm } = this.state
const btnDisabled = (searchTerm.length === 0) === true
return (
<div className="well search-form soft push--bottom">
<ul className="form-fields list-inline">
<li className="flush">
<Input
id="search"
name="search"
type="text"
placeholder="Enter a search term..."
className="text-input"
value={searchTerm}
onChange={this.handleChange}
/>
<div className="feedback push-half--right" />
</li>
<li className="push-half--left">
<Button className="btn btn--positive" disabled={btnDisabled} onClick={this.handleSubmit}>
Search
</Button>
</li>
</ul>
</div>
)
}
}
export default SearchForm
第一个选项:
it('should call handleSubmit function on submit', () => {
const wrapper = shallow(<Search toggleAlert={jest.fn()} />)
const spy = jest.spyOn(wrapper.instance(), 'handleSubmit')
wrapper.instance().forceUpdate()
wrapper.find('.btn').simulate('click')
expect(spy).toHaveBeenCalled()
spy.mockClear()
})
第二个选项:
it('should call handleSubmit function on submit', () => {
const wrapper = shallow(<Search toggleAlert={jest.fn()} />)
wrapper.instance().handleSubmit = jest.fn()
wrapper.update()
wrapper.find('.btn').simulate('click')
expect(wrapper.instance().handleSubmit).toHaveBeenCalled()
})
我得到了一个类属性,函数是类的一个实例,需要更新组件才能注册函数,但是它看起来像组件 handleSubmit 函数被调用而不是模拟?
将 handleSubmit 换成一个类函数作为一种方法让我可以访问类原型,它在监视 Search.prototype 时通过了测试,但我真的很想获得类属性方法的解决方案。
所有建议和建议将不胜感激!
原文由 styler 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想单元测试应该足够健壮以捕获
error
,如果发生任何不需要的代码更改。请在您的测试中包含严格的断言。
对于条件语句,请同时覆盖分支。例如,在
if
和else
语句的情况下,您将必须编写two
测试。对于用户操作,您应该尝试模拟操作而不是手动调用函数。
请看下面的例子,