reactjs - 如何在 Jest 中向我的测试添加 <canvas> 支持?

标签 reactjs html5-canvas jsdom jestjs

在我的Jest单元测试我正在渲染一个带有 ColorPicker 的组件。 ColorPicker 组件创建一个 Canvas 对象和 2d 上下文,但返回 'undefined' 并引发错误 “Cannot set property 'fillStyle' of undefined”

if (typeof document == 'undefined') return null; // Dont Render On Server
var canvas = document.createElement('canvas'); 
canvas.width = canvas.height = size * 2;
var ctx = canvas.getContext('2d'); // returns 'undefined'
ctx.fillStyle = c1; // "Cannot set property 'fillStyle' of undefined"

我无法弄清楚为什么我无法获得二维上下文。也许我的测试配置有问题?

"jest": {
  "scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
  "unmockedModulePathPatterns": [
    "<rootDir>/node_modules/react",
    "<rootDir>/node_modules/react-dom",
    "<rootDir>/node_modules/react-addons-test-utils",
    "<rootDir>/node_modules/react-tools"
  ],
  "moduleFileExtensions": [
    "jsx",
    "js",
    "json",
    "es6"
  ],
  "testFileExtensions": [
    "jsx"
  ],
  "collectCoverage": true
}

最佳答案

对于那些寻找使用 create-react-app 示例的人

安装

yarn add --dev jest-canvas-mock

创建一个新的 ${rootDir}/src/setupTests.js

import 'jest-canvas-mock';

关于reactjs - 如何在 Jest 中向我的测试添加 <canvas> 支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33269093/

相关文章:

node.js - 如何在 io.js 中的 SVG 文件上添加 CSS?

javascript - 使用 Jest 测试类组件 firebase 操作

javascript - 尝试将 Canvas 从一页复制到另一页

javascript - jsdom:dispatchEvent/addEventListener 似乎不起作用

node.js - 我在哪里可以找到 jsdom 文档?

javascript - requestAnimationFrame 没有取消

node.js - 如何在 redux 操作中链接 Promise

javascript - 如何从 URL 隐藏更新状态

javascript - 映射到 Prop (名称数组)返回带有逗号字符串的名称 ("Pam,,,,,,,,,,,,,,,") - 数组中的每个项目一个

javascript - 用 JavaScript 和 HTML5 Canvas 实现的元胞自动机