рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ( canvas
/ canvas-prebuilt
) рдХреЗ рдмрд┐рдирд╛ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдордЬрд╛рдХ рдЙрдбрд╝рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреИрдирд╡рд╛рд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ:
Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:
const utils = require("jsdom/lib/jsdom/utils");
const canvasMock = require("canvas-mock");
function Canvas () {
canvasMock(this);
this.toDataURL = function() { return ""; }
}
utils.Canvas = Canvas;
рдХреГрдкрдпрд╛ рдРрд╕рд╛ рди рдХрд░реЗрдВред рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреИрдЪ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, getContext() рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ, рдЕрд░реНрдерд╛рдд window.HTMLCanvasElement.prototype.getContext = ...
рдзрдиреНрдпрд╡рд╛рдж @ рдбреЛрдорд┐рдирд┐рдХ !
@domenic рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореЗрд░реА рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЬреЗрд╕реНрдЯ рдФрд░ рд╕реЗрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
import { jsdom } from 'jsdom';
import mockLocalStorage from './mockLocalStorage';
import jQuery from 'jquery';
import Backbone from 'backbone';
import moment from 'moment';
const dom = jsdom('<!doctype html><html><body></body></html>');
const { window } = dom.defaultView;
function copyProps(src, target) {
const props = Object.getOwnPropertyNames(src)
.filter(prop => typeof target[prop] === 'undefined')
.map(prop => Object.getOwnPropertyDescriptor(src, prop));
Object.defineProperties(target, props);
}
//Mock canvas (used by qtip)
window.HTMLCanvasElement.prototype.getContext = () => {
return {};
};
global.window = window;
global.document = window.document;
global.navigator = {
userAgent: 'node.js',
};
global.localStorage = mockLocalStorage;
global.jQuery = jQuery;
global.$ = jQuery;
global.fetch = () => Promise.resolve();
Backbone.$ = jQuery;
copyProps(window, global);
//Mock Mousetrap (only works in browser)
jest.mock('mousetrap', () => { return { bind: () => {}}});
//Set moment locale for all tests
moment.locale('sv');
рдиреЛрдб рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рджреВрд╖рдг рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рдФрд░ рдмрдбрд╝рд╛ рдХреЛрдб рдЖрдзрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред
рдЬреЗрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг: 21.2.1
Jsdom рд╕рдВрд╕реНрдХрд░рдг: 9.12.0
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореЙрдХрд┐рдВрдЧ рдХреИрдирд╡рд╛рд╕ (рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреИрдирд╡рд╛рд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛) рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рди рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдореБрджреНрджреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВред
рдХреИрдирд╡рд╛рд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг
рдХреИрдирд╡рд╛рд╕-рдкреВрд░реНрд╡рдирд┐рд░реНрдорд┐рдд рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ? рдпрд╣реА рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╡рд┐рди, рдореИрдХ рдФрд░ рд▓рд┐рдирдХреНрд╕, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдм рдХреБрдЫ x64 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдо рдбреЙрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдПрдХрдореБрд╢реНрдд рдирдХрд▓реА рдореБрджреНрджреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕реЗ https://github.com/tmpvar/jsdom#intervening -before-parsing рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдбрдмреЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣реИред
рдпрд╣рд╛рдБ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдЖрдпрд╛ рд╣реВрдБ:
//
// Mock Canvas / Context2D calls
//
function mockCanvas (window) {
window.HTMLCanvasElement.prototype.getContext = function () {
return {
fillRect: function() {},
clearRect: function(){},
getImageData: function(x, y, w, h) {
return {
data: new Array(w*h*4)
};
},
putImageData: function() {},
createImageData: function(){ return []},
setTransform: function(){},
drawImage: function(){},
save: function(){},
fillText: function(){},
restore: function(){},
beginPath: function(){},
moveTo: function(){},
lineTo: function(){},
closePath: function(){},
stroke: function(){},
translate: function(){},
scale: function(){},
rotate: function(){},
arc: function(){},
fill: function(){},
measureText: function(){
return { width: 0 };
},
transform: function(){},
rect: function(){},
clip: function(){},
};
}
window.HTMLCanvasElement.prototype.toDataURL = function () {
return "";
}
}
const document = jsdom.jsdom(undefined, {
virtualConsole: jsdom.createVirtualConsole().sendTo(console)
});
const window = document.defaultView;
mockCanvas(window);
рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдкреИрдХреЗрдЬ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
рд╣реИрд▓реЛ @ рдХреИрдЯрд░рдореЛ ,
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбрд┐рдкреЛ рдореЗрдВ рдХреИрдирд╡рд╛рд╕-рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрджрд▓рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛ рдпрд╣ рдореБрдЭреЗ рджреЗрддрд╛ рд╣реИ
Not implemented: HTMLCanvasElement.prototype.toBlob (without installing the canvas npm package)
@ рдореАрдХрд╛рдмреЗ
рдореИрдВрдиреЗ рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рддреЛ Jsdom рдХреИрдирд╡рд╛рд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░ рд▓реЗрдЧрд╛ред
рд╢рд╛рдпрдж рд╡рд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ?
рдпрд╣ рдЕрдм yarn cache clean
рдмрд╛рдж рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ! рдзрдиреНрдпрд╡рд╛рдж @ рдХреИрдЯрд░рдореЛ
рд╢рд╛рдпрдж рдЬреЗрд╕реНрдЯ-рдХреИрдирд╡рд╛рд╕-рдореЙрдХ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИ, рдмрд╕ canvas
рдХреЛ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдордЬрд╝рд╛рдХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБред
рд░реЗрдлрд░реА: https://github.com/jsdom/jsdom#canvas -support
рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ jsdom рдХреИрдирд╡рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП lib/jsdom/utils.js рдкрд░ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ:
exports.Canvas = require(moduleName);
if (typeof exports.Canvas !== "function") {
// In browserify, the require will succeed but return an empty object
exports.Canvas = null;
}
рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдХреИрдирд╡рд╛рд╕') рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реАрдзреЗ рдХреИрдирд╡рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЧрд▓рдд рд╣реВрдБ? рдЬрдм рдореИрдВ рдХреИрдирд╡рд╛рд╕-рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рд╣реИред рдореИрдВ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 2.0.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг (1.6.x) рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬрд┐рд╕рдХрд╛ JSDOM рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдЖрдк рдмрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
HTMLCanvasElement.prototype.getContext = jest.fn()
рдпрджрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ
рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ jsdom рдХреИрдирд╡рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП lib/jsdom/utils.js рдкрд░ рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ:
exports.Canvas = require(moduleName); if (typeof exports.Canvas !== "function") { // In browserify, the require will succeed but return an empty object exports.Canvas = null; }
рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдХреИрдирд╡рд╛рд╕') рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕реАрдзреЗ рдХреИрдирд╡рд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЧрд▓рдд рд╣реВрдБ? рдЬрдм рдореИрдВ рдХреИрдирд╡рд╛рд╕-рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреИрдирд╡рд╛рд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рд╣реИред рдореИрдВ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 2.0.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг (1.6.x) рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬрд┐рд╕рдХрд╛ JSDOM рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ jsdom рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рдХреНрд╕ рдХреЛ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ https://github.com/jsdom/jsdom/pull/1964 рдореЗрдВ рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 13
рдмрд╛рдж рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, jsdom
рд╕рдВрд╕реНрдХрд░рдг jest-environment-jsdom
рдореЗрдВ рдЕрднреА рднреА ^11.5.1
рдкрд░ рдЕрдЯрдХрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ:
https://github.com/facebook/jest/blob/2e2d2c8dedb76e71c0dfa85ed36b81d1f89e0d87/packages/jest-environment-jsdom/package.json#L14
рдХреИрдирд╡рд╛рд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╛ рдХреИрдирд╡рд╛рд╕- рдкреНрд░реАрдмрд┐рд▓реНрдЯ HTMLCanvasElement рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд╕рд╛рде рд╣реА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @endel рджреНрд╡рд╛рд░рд╛ рд╣реИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреИрдирд╡рд╛рд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ @hustcc рдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдХрд╛рдлреА рд╕рд╛рдл рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд╕рд╛рде рдЬреЗрд╕реНрдЯ-рдХреИрдирд╡рд╛рд╕-рдореЙрдХ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдореИрдВ "рд╡реЗрдмрдХрд┐рдЯ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛" рдЬреИрд╕реЗ рд╕рдВрджреЗрд╢ рджреЗрдЦ рд░рд╣рд╛ рдерд╛рдмреИрдХрд┐рдВрдЧрд╕реНрдЯреЛрд░PixelRatio of null", рд╕рд╛рде рд╣реА рд╕рд╛рде "
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛: HTMLCanvasElement.prototype.getContext (рдХреИрдирд╡рд╛рд╕ npm рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛)", рдФрд░ рдХреИрдирд╡рд╛рд╕ (-prebuilt) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рдореИрдВ package-lock.json рдХреЗ рдЕрдВрджрд░ рдЧрдпрд╛, jsdom 13 рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jest-environment-jsdom рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ , рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рд╕реЗ рдПрдирдкреАрдПрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЪрд▓реЗ рдЧрдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @paradite рд╕рд╣реА рд╣реИ, рдФрд░ рдордЬрд╛рдХ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдЯрд┐рдХрдЯ рдЦреЛрд▓рд╛:
рдлреАрдбрдмреИрдХ рдорд┐рд▓рд╛ред рдпрд╣ рдкреБрд░рд╛рдиреЗ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЯрдХреЗ рд╣реБрдП рдордЬрд╛рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ: https://www.npmjs.com/package/jest-environment-jsdom-thirteenред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдордЬрд╝рд╛рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡рд┐рд╖рдп рд╣реИред рднрд╛рд╡реА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛..
@grtjn - рдЬреЗрд╕реНрдЯ-рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ- jsdom- рддреЗрд░рд╣ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдЕрднреА рднреА рдпреЗ 2 рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕реА рд╣реА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд┐рд▓реА рд╣реИрдВ
Error: Not implemented: HTMLCanvasElement.prototype.getContext (without installing the canvas npm package)
TypeError: Cannot read property 'fillRect' of null
рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ 10.15 рдПрдХ рдкрджрд╛рд╡рдирдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдБ рдорд┐рд▓реА рд╣реИрдВ
Angular CLI: 7.2.4
Node: 10.15.0
OS: win32 x64
Angular: 7.2.4
рдПрдлрд╡рд╛рдИрдЖрдИ: рдореБрдЭреЗ рдЕрдкрдиреЗ рдЬреЗрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ "testEnvironment": "jest-environment-jsdom-thirteen"
рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛, рдФрд░ рдХреИрдирд╡рд╛рд╕ рдкреИрдХреЗрдЬ, рд╕рд╛рде рд╣реА рдХрд╛рд╣рд┐рд░рд╛ рдУрдПрд╕ рдЯреВрд▓рд╕реЗрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреИрдирд╡рд╛рд╕-рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рд╡реВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рдХрд╛рд╣рд┐рд░рд╛ рдУрдПрд╕ рдЯреВрд▓рд╕реЗрдЯ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ? рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
@danieldanielecki 'рдХреИрдирд╡рд╛рд╕' рдкреИрдХреЗрдЬ рдХрд╛ рдореБрдЦреНрдп рдкреГрд╖реНрда рджреЗрдЦреЗрдВ: https://www.npmjs.com/package/canvas#compiling
@grtjn рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рд╢рд╛рдпрдж рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕рдХрд╛ рд▓рд╛рдн
рдиреЗрдХреНрд░реЛрдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди @grtjn jest-environment-jsdom-
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣рд╛рдБ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдЖрдпрд╛ рд╣реВрдБ: