Gewusst wie: hinzufügen <canvas> Unterstützung für meine Prüfungen im Scherz?
In meinem Scherz unit-test-ich bin rendering-Komponente mit ColorPicker. Die ColorPicker
- Komponente erstellt ein canvas-Objekt und 2d-Kontext aber zurück 'undefined'
die wirft einen Fehler "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"
Ich habe Schwierigkeiten, herauszufinden, warum ich nicht bekommen kann einen 2d-Kontext. Vielleicht gibt es ja auch ein Problem mit meine 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
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist, weil Sie Ihren test ausführen nicht in einem echten browser. Scherz verwendet
jsdom
für Spott die notwendigen Teile des DOM, um in der Lage zu führen Sie die tests in den Knoten, so dass Stil Berechnung und Darstellung, dass ein browser normalerweise tun würde. Das ist cool, weil das macht die tests fallen.Auf der anderen Seite, wenn Sie brauchen, browser-APIs in Ihre Komponenten, ist es schwieriger, dann im browser. Zum Glück,
jsdom
hat die Unterstützung für canvas. Sie müssen nur um es zu konfigurieren:Alternativ könnte man ersetzen, den Scherz mit einigen browser-basierte test-runner wie Karma. Scherz ist ziemlich buggy sowieso.
npm install canvas-prebuilt
- npmjs.com/package/canvas-prebuiltjsdom
. Wenn Sie hinzufügenjsdom
Ihren Abhängigkeiten und fügen Sie eine Auflösung"jest/**/jsdom": "13.0.0"
dieses Problem beheben sollte.error Received malformed response from registry for undefined. The registry may be down.
Für diejenigen, die Beispiele mit den create-reagieren-app
Installieren
Erstellen Sie eine neue
${rootDir}/src/setupTests.js
mitjest-canvas-mock
zu meinemjest.config.js
wie sosetupFiles: [ "jest-canvas-mock" ]
Ich hatte das exakt gleiche Problem. Ich bin die Bereitstellung auf gitlab ci laufen meine tests, und da npm Leinwand erfordert eine installation von Kairo, mithilfe, war keine sinnvolle option.
Alles, was ich wirklich tun wollte, war, zu verhöhnen die Umsetzung durch Scherz, so dass es nicht wirklich versuchen, erstellen Sie einen realen Kontext. Hier ist, wie ich es gelöst:
Hinzugefügt, um Paket.json
tests/setup.js
Für meinen Anwendungsfall habe ich einfach monkey-patching, wie dies
Keine Notwendigkeit zur Installation der Leinwand-vordefinierte oder sinon.
Diese bietet Unterstützung für die canvas-Scherz.Dies funktioniert sogar, wenn jemand immer Fehler wegen Lottie.js.
Testen Leinwand Ausgabe im Scherz, müssen Sie Folgendes tun:
Stellen Sie sicher, dass Sie mit mindestens jsdom 13. Sie können dies tun, indem Sie die jsom-Paket für Scherz, für 14 ist es:
jest-environment-jsdom-fourteen
Und konfigurieren Scherz zu verwenden, diese
jest --env=jest-environment-jsdom-fourteen
oder in der
package.json
Gehören die
canvas
npm-Paket. (als der 2.x dies beinhaltet die integrierte version, so Leinwand-prebuilt " ist veraltet).