如何使用Jest测试React项目中Next.js Router.push的options参数
问题根因
- 你当前的断言只匹配了
push方法的第一个入参,但实际业务代码调用push时一共传了3个参数:路由配置对象、undefined、{scroll: false},入参数量不匹配导致断言失败 - 报错信息显示实际调用时传入的
query是空对象,说明你在测试中触发handleFilter方法时,没有正确传入预期的items参数
修复步骤
首先确认测试用例中触发逻辑的传参正确
检查你触发筛选逻辑的代码,确保调用handleFilter时传入了预期的参数:{ platforms: ['windows', 'linux'], sort_by: 'low-to-high' },同时确认你代码中按钮绑定的handleShowMore方法内部调用handleFilter时传值无误,不要传入空对象。修改断言匹配完整入参
你可以选择完整匹配所有入参,写法如下:
expect(push).toHaveBeenCalledWith( { pathname: '/games', query: { platforms: ['windows', 'linux'], sort_by: 'low-to-high' }, }, undefined, { scroll: false } );
如果你不需要校验后两个参数,也可以用expect.anything()忽略不需要校验的部分:
expect(push).toHaveBeenCalledWith( { pathname: '/games', query: { platforms: ['windows', 'linux'], sort_by: 'low-to-high' }, }, expect.anything(), expect.anything() );
内容的提问来源于stack exchange,提问作者Arthur
相关产品推荐
相关产品推荐

