下面是我的自定义钩子:
export function useClientRect() {
const [scrollH, setScrollH] = useState(0);
const [clientH, setClientH] = useState(0);
const ref = useCallback(node => {
if (node !== null) {
setScrollH(node.scrollHeight);
setClientH(node.clientHeight);
}
}, []);
return [scrollH, clientH, ref];
}
}
我希望每次调用它时,它都返回我的值。
jest.mock('useClientRect', () => [300, 200, () => {}]);
我怎样才能做到这一点?
3条答案
按热度按时间jvidinwx1#
将钩子作为一个模块加载,然后模拟这个模块:
mock应该在测试fn之外的文件顶部调用,因此我们将只使用一个数组作为模拟值。
如果要在不同的测试中使用不同的值模拟钩子:
blmhpbnm2#
对于遇到
TS2339: Property 'mockReturnValue' does not exist on type
错误消息的打字脚本用户,添加这个答案。现在有一个jest.mockedFunction,你可以用Type defs调用它来模拟(它是ts-jest/utilsmocked
函数的一个端口)。oxosxuxt3#
这是相当棘手的,有时开发人员会被这个库搞糊涂,但一旦你习惯了它,它就变得小菜一碟了。几个小时前我遇到过类似的问题,我分享了我的解决方案,让你轻松地得到你的解决方案。
我的自定义钩子:
我的模拟代码:请将此模拟包含在测试函数之外的测试文件中。注意mock的返回对象,它应该与预期的响应匹配。
完整的测试文件为: