reactjs - 是否可以断言一个函数是否是一个空函数?
问题描述
我有一个像这样的通用输入组件:
class GenericInputComponent extends React.Component {
constructor (props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange (evt) {
this.props.onChange(evt);
}
render () {
return (<Something />)
}
}
GenericComponent.defaultProps = {
onChange: () => {}
}
对于这个组件,我的一项测试是测试组件是否使用默认道具:
it('should use default props', function () {
delete props.onChange // Before this the onChange was jest.fn()
rendered.unmount()
rendered = shallow(<Input {...props} />)
let onChange = () => {}
expect(rendered.instance().props.onChange).toEqual(onChange)
expect(rendered.instance().props.onChange).toBeInstanceOf(Function)
})
测试在以下行失败:
expect(rendered.instance().props.onChange).toEqual(onChange)
并给出此错误:
Expected value to equal:
[Function onChange]
Received:
[Function onChange]
Difference:
Compared values have no visual difference.
据我所知,它应该会过去,但事实并非如此。为什么?是否可以断言正在使用的函数是否为空函数?
此外,如果我尝试像这样监视函数:
let onChangeSpy = jest.spyOn(rendered.instance().props, 'onChange')
我收到此错误:
`TypeError: Cannot assign to read only property 'onChange' of object '[object Object]'`
仅供参考,我正在使用shallow
渲染进行测试。
那么可以断言一个空函数吗?此外,不幸的是,这是唯一coverage
无法实现 100% 覆盖率的事情。
解决方案
这是意料之中的,因为函数是一个对象,并且对象在 JavaScript 中通过引用进行比较:
(() => {}) !== (() => {})
如果该方法为空,则可以通过断言来测试该方法onChange.toString()
。但是这里要测试的onChange
不仅仅是一些空函数,而是一个默认设置的道具。即它应该是:
expect(rendered.instance().props.onChange).toBe(GenericInputComponent.defaultProps.onChange)
如果该函数为空,则可以选择测试该函数:
expect(GenericInputComponent.defaultProps.onChange).toBeInstanceOf(Function);
expect(GenericInputComponent.defaultProps.onChange.toString().match(/\{(.*)}$/)[1])).toMatch(/^\s*$/);
推荐阅读
- python - S3 对象可以从 Apache 服务器下载为 Zip 吗?
- java - 如何使用 java.awt.geom.Area 中的区域进行碰撞检测?
- javascript - SQL 选择和更新语法
- react-native - https 站点未使用 React Native Expo 32 WebView 加载
- spring - 如何使用 spring-cloud starter 添加标签或行李?
- javascript - 如何使用单独的 router.js 文件添加 Vuetify 选项卡?
- firebase - 通过 Firebase rest api 使用 OAuth2 登录被拒绝
- javascript - 当 Bootstrap Tooltip 到达屏幕顶部时,它会从上到下变化
- sql - 按与组函数的最大值关联的值查找组
- python - 从json文件读取数据然后写入嵌入?