In my Jest unit test I am rendering a component with a ColorPicker. The ColorPicker
component creates a canvas object and 2d context but returns 'undefined'
which throws an error "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"
I'm having troubles figuring out why I can't get a 2d context. Maybe there an issue with my test config?
"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
}
For those looking for examples using create-react-app
Install
yarn add --dev jest-canvas-mock
Create a new ${rootDir}/src/setupTests.js
with
import 'jest-canvas-mock';