【发布时间】:2023-02-03 06:36:03
【问题描述】:
我有一个 HTML <canvas> 元素,它使用 onTouchEnd 属性获取画布内容并转换为 dataUrl,但这不受 Jest 支持。
大多数文章建议添加 jest-canvas-mock 库来模拟所有 HTMLCanvasElement 的东西。但这似乎有些矫枉过正,因为我只需要模拟 toDataURL 方法。所以我想检查如何使用 jest.mock 或 jest.spyOn 模拟 toDataURL() 并返回固定字符串。
为了清楚起见,我需要这个,因为 onChange 函数设置了一个状态值 (useState) 来控制按钮是否启用。
组件.js
export default function MyComponent() {
const setTouchPosition = e => {
const canvas = document.getElementById('canvas');
const rect = canvas.getBoundingClientRect();
// .. a few lines omitted for readability
};
const draw = e => {
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
// .. a few lines omitted for readability
};
return (
<canvas
onTouchEnd={e => {
onChange(e.target.toDataURL());
onTouchMove={e => draw(e)}
onTouchStart={e => {
setTouchPosition(e);
}}
}}
/>
);
}
查看.js
export default function MyView() {
const [data, setData] = useState('');
const onChange = image => {
setData(image);
};
return (
<Button disabled={data === ''}>Button label</Button>
);
}
如果 Component.js 不调用 onChange 函数,我将无法启用此 Button 并对其使用 fireEvent。
【问题讨论】:
标签: reactjs react-testing-library