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.
ملاحظة: jsdom موجود في ملفات الاختبارات الخاصة بي.
وجدت ذلك! عودة keen-js إلى الإصدار 3.4.1 "حل" المشكلة. أحدث إصدار هو 4.0.0.
في حالة وجود أي شخص لديه نفس المشكلة مثل خاصتي ، قررت Keen تقسيم الحزمة الرئيسية الخاصة بهم إلى 3 حزم منفصلة: https://github.com/keen/keen-js/releases/tag/v4.0.0
المشكلة هي أن keen-dataviz.js يستخدم c3.js. أنا لا أستخدم المخططات ، لذا بالنسبة لحالتي ، الحل هو تثبيت التتبع الشديد وإزالة keen-js.
أواجه نفس المشكلة باستخدام jest ، وأحاول التقاط أحد المكونات التي تستخدم
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 ()
هو السطر هنا أيضًا
ملاحظة: يعمل بشكل مثالي على المتصفح ، فقط على سبيل الدعابة يحدث هذا الخطأ
كذلك هنا. أعتقد أن هذا يجيب لماذا: https://github.com/tmpvar/jsdom/issues/1423
تضمين التغريدة
إذا لم تكن بحاجة إلى وظيفة c3 في حالات اختبار الدعابة ، أعتقد أنه لا بأس من استبدال SVGPathElement بكائن وهمي.
تمكنت من طلب c3.js في بيئة العقدة عن طريق dummying 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",
}
هاهاها هذا مثير للاهتمام ، شكرًا لمشاركة النصيحة ، سأقوم بتنفيذ مشروعي ، شكرًا لك!
لقد كنت متحمسًا لحل هذه المشكلة باستخدام اقتراحesonmez ، ولكن منذ المشروع الذي أعمل فيه على تعزيز تطبيق create-response-app ، تعثرت مرة أخرى:
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.
محبطة على أقل تقدير. على أي حال ، في ملف الإعداد المزاح الخاص بنا ، تمكنت من السخرية منه تمامًا كما فعل @ kt3k :
global.SVGPathElement = function () {}
وعمل ذلك مثل السحر. شكرا لمساعتكم جميعا!
بالنسبة للأسئلة التي تتضمن التفاعل بين C3.js وأي مكتبة أخرى (رد فعل ، vuejs ، ..) يرجى استخدام مجموعة Google على https://groups.google.com/forum/#!forum/c3js.
شكرا لك!
التعليق الأكثر فائدة
fernandes فهمت. لقد لعبت معها أكثر قليلاً وتمكنت من إجراء اختبارات اللقطة بالسخرية من c3:
ثم في جزء تكوين Jest من
package.json
: