这是我的自定义钩子:
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, () => {}]);
我该如何实现?
答案 0 :(得分:13)
将挂钩作为模块加载。然后模拟该模块:
jest.mock('module_name', () => ({
useClientRect: () => [300, 200, jest.fn()]
}));
模拟应在测试fn之外的文件顶部调用。因此,我们将只有一个数组作为模拟值。
如果要在不同的测试中模拟具有不同值的钩子:
import * as hooks from 'module_name';
it('a test', () => {
jest.spyOn(hooks, 'useClientRect').mockImplementation(() => ([100, 200, jest.fn()]));
//rest of the test
});