TypeError: Cannot read property 'prototype' of undefined
at ../../../../node_modules/c3/c3.js:2720:30
at ../../../../node_modules/c3/c3.js:3263:3
at Object.<anonymous>.CLASS.target (../../../../node_modules/c3/c3.js:2:82)
at Object.<anonymous> (../../../../node_modules/c3/c3.js:5:2)
ΠΊΠΎΡΠΎΡΡΠΉ
window.SVGPathElement.prototype.createSVGPathSegClosePath = function () {
Π― Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, Π³Π΄Π΅ ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠΈΡΡ. Π¨ΡΡΠΊΠ°, jsdom, Π·Π΄Π΅ΡΡ?
Π― ΡΠΎΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ, Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π»ΠΈ ΡΡΠΎ Π² c3 ΠΈΠ»ΠΈ jsdom.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ npm. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΡΠΎ:
npm i -S c3 jsom
node -e "var JSDOM = require('jsdom').JSDOM; global.window = new JSDOM().window; require('c3');"
ΠΡΡ ΠΎΠ΄:
/home/herinson/example/node_modules/c3/c3.js:2720
window.SVGPathElement.prototype.createSVGPathSegClosePath = function () {
^
TypeError: Cannot read property 'prototype' of undefined
at /home/herinson/example/node_modules/c3/c3.js:2720:30
at /home/herinson/example/node_modules/c3/c3.js:3263:3
at CLASS.target (/home/herinson/example/node_modules/c3/c3.js:2:82)
at Object.<anonymous> (/home/herinson/example/node_modules/c3/c3.js:5:2)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Module.require (module.js:517:17)
Π Π°Π½ΡΡΠ΅ Ρ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π» ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΡΠΈΠΌ https://github.com/tmpvar/jsdom/pull/1445
ΠΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SVGPathElement?
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ SVG jsdom (Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΈΡ Π½Π΅ Π²ΠΈΠ½Ρ; ΡΡΠΎ Π΄Π΅ΡΡΠΌΠΎ Π·Π²ΡΡΠΈΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠΎ ΠΎΡΡΡΠΎΠΉ)
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΎΠ±Ρ ΠΎΠ΄Π½ΡΠΌ ΠΏΡΡΠ΅ΠΌ? Π― Ρ ΠΎΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ C3 Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ jsdom / jest, Π½ΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΡΠΈΠΊ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ C3, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠ³ Π±Ρ Π΅Π³ΠΎ Π·Π°Π³Π»ΡΡΠΈΡΡ ...
ΠΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SVGPathElement?
ΠΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Π― Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ c3, Π½ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ΡΡΡ.
ΠΠΎΠΈ ΡΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° Ρ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΠΊΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π― Π²ΡΠ΅ Π΅ΡΠ΅ ΠΏΡΡΠ°ΡΡΡ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ c3.
PS: jsdom ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΌΠΎΠΈΡ
ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
.
ΠΠ°ΡΠ΅Π»! ΠΡΠΊΠ°Ρ keen-js Π΄ΠΎ v3.4.1 Β«ΡΠ΅ΡΠΈΠ»Β» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ - 4.0.0.
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Ρ ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠ°ΠΊ Ρ ΠΌΠ΅Π½Ρ, ΠΠΈΠ½ ΡΠ΅ΡΠΈΠ» ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π½Π° 3 ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°: https://github.com/keen/keen-js/releases/tag/v4.0.0
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ keen-dataviz.js ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ c3.js. Π― Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ keen-tracking ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ keen-js.
Π― ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ jest, ΠΈ ΠΏΡΡΠ°ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ response-c3js.
TypeError: Cannot read property 'prototype' of undefined
at node_modules/c3/c3.js:2806:30
at node_modules/c3/c3.js:3349:3
ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² Π½ΠΎΠΌΠ΅ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²Π΅ΡΡΠΈΡ c3: 0.4.18)
ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: window.SVGPathElement.prototype.createSVGPathSegClosePath = function ()
- ΡΡΠΎ ΡΠΎΠΆΠ΅ ΡΡΡΠΎΠΊΠ° Π·Π΄Π΅ΡΡ
ps: ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΏΡΠΎΡΡΠΎ Π½Π° ΡΡΡΠΊΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ°
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ²Π΅Ρ: https://github.com/tmpvar/jsdom/issues/1423
@brandonros
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ c3 Π² Π²Π°ΡΠΈΡ
ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
, Ρ Π΄ΡΠΌΠ°Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ SVGPathElement Π½Π° ΡΠΈΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ c3.js Π² ΡΡΠ΅Π΄Π΅ ΡΠ·Π»Π°, ΡΠΎΠ·Π΄Π°Π² ΠΎΠΊΠ½ΠΎ Window.SVGPathElement, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
var JSDOM = require('jsdom').JSDOM;
global.window = new JSDOM().window;
window.SVGPathElement = function () {};
console.log(require('c3')); // => no error!
@fernandes Π£ ΠΌΠ΅Π½Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π£Π΄Π°Π»ΠΎΡΡ Π»ΠΈ Π²Π°ΠΌ Π½Π°ΠΉΡΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΡΡ?
ΠΏΡΠΈΠ²Π΅Ρ @esonmez , Ρ Π½Π΅ ...
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π», ΡΡΠΎ jsdom Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π½Π° Π½Π΅ΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» SVG, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ c3 Π² ΡΠ΅ΡΡΠ°Ρ (ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ jdsom), Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ c3 Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ³, ΠΈ ΠΎΡΠ±ΡΠΎΡΠΈΠ» ΡΡΠΎΡ ΡΠ΅ΡΡ, Ρ Π΅Ρ Π΅Ρ
@fernandes ΠΠΎΠ½ΡΡΠ½ΠΎ . Π― ΠΏΠΎΠΈΠ³ΡΠ°Π»ΡΡ Ρ Π½ΠΈΠΌ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠΌΠΎΠ³ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΎΠ², ΠΈΠ·Π΄Π΅Π²Π°Π²ΡΠΈΡΡ Π½Π°Π΄ c3:
// __mocks__/c3.js
module.exports = () => 'c3';
Π° Π·Π°ΡΠ΅ΠΌ Π² ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Jest ΠΌΠΎΠ΅Π³ΠΎ package.json
:
"moduleNameMapper": {
"c3": "<rootDir>/__mocks__/c3.js",
}
Ρ Π°Ρ Π°Ρ Π°, ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΠΈΡΡ ΡΠΎΠ²Π΅ΡΠΎΠΌ, Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ!
Π― Π±ΡΠ» ΡΠ°Π΄ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ
Out of the box, Create React App only supports overriding these Jest options:
β’ collectCoverageFrom
β’ coverageReporters
β’ coverageThreshold
β’ snapshotSerializers.
These options in your package.json Jest configuration are not currently supported by Create React App:
β’ moduleNameMapper
If you wish to override other Jest options, you need to eject from the default setup. You can do so by running npm run eject but remember that this is a one-way operation. You may also file an issue with Create React App to discuss supporting more options out of the box.
ΡΠ°Π·ΠΎΡΠ°ΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π² Π½Π°ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ jest Ρ ΡΠΌΠΎΠ³ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ @ kt3k :
global.SVGPathElement = function () {}
Π ΡΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΠΊΠ°ΠΊ ΡΠ°ΡΠΌ. ΠΡΠ΅ΠΌ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ!
ΠΠΎ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ C3.js ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ (react, vuejs, ..), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π³ΡΡΠΏΠΏΡ Google ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://groups.google.com/forum/#!forum/c3js.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
@fernandes ΠΠΎΠ½ΡΡΠ½ΠΎ . Π― ΠΏΠΎΠΈΠ³ΡΠ°Π»ΡΡ Ρ Π½ΠΈΠΌ Π΅ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠΌΠΎΠ³ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΎΠ², ΠΈΠ·Π΄Π΅Π²Π°Π²ΡΠΈΡΡ Π½Π°Π΄ c3:
Π° Π·Π°ΡΠ΅ΠΌ Π² ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Jest ΠΌΠΎΠ΅Π³ΠΎ
package.json
: