reactjs - 开玩笑用钩子模拟函数失败
问题描述
我正在使用nextJs
和jest
enzyme
测试组件。我有一个像下面这样的组件文件,我从 props 获取数组并循环到它在里面items
调用.setRef
useEffect
[itemRefs, setItemRefs] = React.useState([]);
setRef = () => {
const refArr = [];
items.forEach(item => {
const setItemRef = RefItem => {
refArr.push(RefItem)
}
if(item && item.rendItem){
item.rendItem = item.rendItem.bind(null, setItemRef);
}
}
setItemRefs(refArr);
}
React.useEffect(() => {
setRef();
},[])
我的测试文件如下:
const items = [
{
original: 'mock-picture-link',
thumbnail: 'mock-thumb-link',
renderItem: jest.fn().mockReturnValue({ props: { children: {} } })
}
];
beforeEach(() => {
setItemRefs = jest.fn(),
jest.spyOn(React, 'useEffect').mockImplementationOnce(fn => fn());
})
it('mocks item references', ()=>{
jest.spyOn(React, 'useState').mockImplementationOnce(() => [items, setItemRefs]);
wrapper = shallow(<Component />).dive();
expect(setItemRefs).toHaveBeenCalledWith(items);
})
测试用例失败,因为items
数组但收到了一个空白数组。内部工作,但console.log
内部不起作用我怀疑这不是开玩笑。if(item && item.rendItem)
console.log
const setItemRef = RefItem => {...
.bind
任何帮助都会很好。
解决方案
推荐阅读
- reactjs - 使用 withRouter(withStyles(styles)(ComponentName)) 时出现打字稿错误
- linux - 从最新/到行尾排除数据
- ruby - 为什么这个代码片段应该返回“false”时输出“true”?
- c# - 在 C# 中将我的枚举转换/转换为对象
- python - 使用 spark-submit 时在哪里执行 python 脚本?
- javascript - JavaScript Object w/Async + forEach 循环 - 赋值问题
- android - 关于适合开发安卓应用的数据库
- python - QGraphics 框架如何工作?
- python - Regexp - 匹配模式,除非它是另一个模式的一部分
- reactjs - 是否可以在自己的组件中使用 ListContext?