lpi*_*e88 15 javascript canvas jsdom jestjs
我正在使用Jest为使用canvas元素的组件编写测试.当我运行看起来像这样的测试时,我一直收到错误.
Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
Run Code Online (Sandbox Code Playgroud)
根据我的理解,Jest使用jsdom进行测试,如果安装了canvas或canvas预构建的包,jsdom与canvas兼容.
我尝试过安装这些软件包,但都没有解决错误.我认为唯一可能出错的是jsdom无法找到画布或画布预建包.有没有人知道一种方法来修复此错误或测试,以查看jsdom是否找到其他包?非常感谢!
Pau*_*est 37
我的团队正在使用create-react-app,我们之前通过添加 npm 包解决了这个问题jest-canvas-mock。现在升级到 react-scripts 3.4.1 后,我们还必须向我们的src/setupTests.ts文件添加一个特定的导入:
import 'jest-canvas-mock';
Run Code Online (Sandbox Code Playgroud)
Red*_*ury 15
您可以在jest安装脚本中创建自己的函数模拟
HTMLCanvasElement.prototype.getContext = () => {
// return whatever getContext has to return
};
Run Code Online (Sandbox Code Playgroud)
Ele*_*dha 14
我的 Jest 测试遇到了类似的问题,并通过安装jest-canvas-mock解决了它。
equ*_*man 14
我已经通过安装jest-canvas-mock解决了这个问题
npm i --save-dev jest-canvas-mock
并添加此配置package.json
{
"jest": {
"setupFiles": [
"jest-canvas-mock"
],
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以将其创建为模拟,并且不安装新包:
HTMLCanvasElement.prototype.getContext = jest.fn();
Run Code Online (Sandbox Code Playgroud)
小智 5
以上两个答案都有效。但是,只是想补充一点,在 create-react-app 的情况下,它不支持 jest-canvas-mock 的 package.json 中 jest conf 所需的“setupFiles”。
我通过在调用 canvas 元素的每个测试文件中添加 import 语句来解决这个问题(在我的案例 3 中)。然后,我将导入语句移至 setupTests.js 文件并删除了该要求。