C3: Tidak dapat membutuhkan() untuk digunakan dengan Jest

Dibuat pada 7 Agu 2017  ·  13Komentar  ·  Sumber: c3js/c3

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)

yang

        window.SVGPathElement.prototype.createSVGPathSegClosePath = function () {

Saya tidak yakin ke mana harus melaporkan ini. Jest, jsdom, di sini?

Komentar yang paling membantu

@fernandes Mengerti. Saya bermain-main dengannya sedikit lebih banyak dan dapat menjalankan tes snapshot dengan mengejek c3:

// __mocks__/c3.js
module.exports = () => 'c3';

dan kemudian di bagian konfigurasi Jest dari package.json :

"moduleNameMapper": {
  "c3": "<rootDir>/__mocks__/c3.js",
}

Semua 13 komentar

Saya juga mendapatkan kesalahan ini, tidak yakin apakah itu masalah dengan c3 atau jsdom.

Buat proyek npm kosong. Kemudian, coba ini:

npm i -S c3 jsom
node -e "var JSDOM = require('jsdom').JSDOM; global.window = new JSDOM().window; require('c3');"

Keluaran:

/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)

Saya tidak mendapatkan kesalahan ini sebelumnya.
Mungkin terkait dengan ini https://github.com/tmpvar/jsdom/pull/1445

Apakah Anda pikir kami bisa mengejek properti SVGPathElement?

Saya pikir ini jelas merupakan masalah dengan implementasi SVG jsdom yang tidak lengkap (yang saya tidak menyalahkan mereka; omong kosong itu terdengar seperti menyebalkan)

Namun, apa solusi yang baik? Saya ingin dapat menguji unit proyek yang memiliki C3 sebagai ketergantungan dengan jsdom/jest, tetapi ini adalah pemblokir yang cukup besar. Saya sebenarnya tidak perlu menguji unit salah satu fungsi C3 jadi saya kira saya bisa mematikannya ...

Apakah Anda pikir kami bisa mengejek properti SVGPathElement?

Itu akan menjadi solusi yang mungkin.

Saya bahkan tidak menggunakan c3, tetapi mungkin paket lain dari proyek saya adalah.
Pengujian saya berfungsi dengan baik sampai saya memperbarui banyak dependensi. Saya masih mencoba mencari tahu ketergantungan apa yang menggunakan c3.
PS: jsdom ada di file pengujian saya.

Menemukannya! Menggulirkan kembali keen-js ke v3.4.1 "menyelesaikan" masalah. Versi terbaru adalah 4.0.0.

Jika ada orang yang memiliki masalah yang sama dengan saya, Keen memutuskan untuk membagi paket utama mereka menjadi 3 paket terpisah: https://github.com/keen/keen-js/releases/tag/v4.0.0

Masalahnya adalah keen-dataviz.js menggunakan c3.js. Saya tidak menggunakan bagan, jadi untuk kasus saya solusinya adalah menginstal pelacakan yang tajam dan menghapus keen-js.

Saya menghadapi masalah yang sama menggunakan lelucon, dan mencoba memotret komponen yang menggunakan

    TypeError: Cannot read property 'prototype' of undefined

      at node_modules/c3/c3.js:2806:30
      at node_modules/c3/c3.js:3349:3

hanya beberapa perbedaan pada nomor baris, mungkin beberapa terkait dengan build (saya menggunakan versi c3: 0.4.18)

perbarui: window.SVGPathElement.prototype.createSVGPathSegClosePath = function () adalah baris di sini juga

ps: berfungsi dengan baik di browser, hanya bercanda terjadi kesalahan ini

Sama disini. Saya percaya yang ini menjawab alasannya: https://github.com/tmpvar/jsdom/issues/1423

@brandonros
Jika Anda tidak memerlukan fungsionalitas c3 dalam kasus uji lelucon Anda, saya pikir tidak apa-apa untuk mengganti SVGPathElement dengan objek dummy.

Saya dapat meminta c3.js di lingkungan simpul dengan membuat dummy window.SVGPathElement seperti di bawah ini:

var JSDOM = require('jsdom').JSDOM;
global.window = new JSDOM().window;
window.SVGPathElement = function () {};
console.log(require('c3')); // => no error!

@fernandes Saya menghadapi masalah yang sama. Sudahkah Anda menemukan solusi?

hai @esonmez , saya belum...

karena saya telah meneliti jsdom tidak mengimplementasikan hal-hal SVG di atasnya, itu sebabnya tidak dapat menggunakan c3 pada tes (yang menggunakan jdsom), saya hanya mengisolasi komponen c3 sebanyak yang saya bisa dan menjatuhkan tes ini heheh

@fernandes Mengerti. Saya bermain-main dengannya sedikit lebih banyak dan dapat menjalankan tes snapshot dengan mengejek c3:

// __mocks__/c3.js
module.exports = () => 'c3';

dan kemudian di bagian konfigurasi Jest dari package.json :

"moduleNameMapper": {
  "c3": "<rootDir>/__mocks__/c3.js",
}

hahaha menarik, terima kasih telah berbagi tipnya, saya akan menerapkannya pada proyek saya, terima kasih!

Saya senang menyelesaikan ini menggunakan saran @esonmez , tetapi karena proyek yang saya kerjakan memanfaatkan create-react-app, saya macet lagi:

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.

Setidaknya frustasi untuk mengatakan. Bagaimanapun, dalam file pengaturan lelucon kami, saya dapat mengejeknya seperti yang dilakukan @kt3k :

global.SVGPathElement = function () {}

Dan itu bekerja seperti pesona. Terima kasih atas bantuan semuanya!

Untuk pertanyaan yang melibatkan interaksi antara C3.js dan perpustakaan lainnya (react, vuejs, ..) silakan gunakan Grup Google di https://groups.google.com/forum/#!forum/c3js.

Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mwho picture mwho  ·  3Komentar

ivarkallejarv picture ivarkallejarv  ·  3Komentar

alantygel picture alantygel  ·  3Komentar

aishwaryak picture aishwaryak  ·  4Komentar

udhaya2kmrv picture udhaya2kmrv  ·  3Komentar