Jsdom: lelucon: SecurityError: localStorage tidak tersedia untuk asal buram

Dibuat pada 27 Jul 2018  ·  80Komentar  ·  Sumber: jsdom/jsdom

Ketika saya menjalankan jest dengan kasus pengujian saya. Ini menunjukkan kesalahan berikut ketika saya memutakhirkan paket. Dalam kasus pengujian saya, tidak ada localStorage yang digunakan. Bagaimana saya bisa memperbaiki masalah ini?

 SecurityError: localStorage is not available for opaque origins

      at Window.get localStorage [as localStorage] (node_modules/jsdom/lib/jsdom/browser/Window.js:257:15)
          at Array.forEach (<anonymous>)


working as intended

Komentar yang paling membantu

@gokulkrishh saya set ke http://localhost/ tetapi URL yang valid tampaknya berfungsi.

Semua 80 komentar

Ringkasan diskusi di bawah ini:

  • Cara mengatasinya adalah dengan menyetel URL untuk jsdom Anda, yang mungkin perlu dilakukan melalui konfigurasi lingkungan pengujian Anda. URL default, dari " about:blank ", akan menyebabkan kesalahan saat mencoba mengakses localStorage.
  • Akar penyebabnya sering kali perpustakaan mengulang semua properti jsdom dan menambahkannya ke global; bahkan jika Anda tidak pernah menggunakan localStorage dalam pengujian Anda, beberapa pustaka atau kerangka pengujian yang Anda andalkan "menggunakannya" dengan cara ini. Perhatikan bahwa teknik pengulangan dan penyalinan ini secara eksplisit tidak didukung , jadi tidak mengherankan bahwa kode yang melakukannya dapat rusak dalam rilis kecil.

Transkripsi komentar di bawah tentang pertanyaan apakah ini adalah "perubahan yang melanggar", yang sejak itu disembunyikan oleh fitur "lihat lebih banyak komentar" GitHub:

Terima kasih, tetapi untuk saat ini saya tidak percaya itu jalan terbaik ke depan. Ini bukan perubahan besar bagi jsdom untuk mengimplementasikan fitur platform web baru; itu versi minor.

Ada kemungkinan bagi tanggungan, bahkan tanggungan yang digunakan secara luas, untuk menulis kode yang tidak menguntungkan yang mendeteksi fitur baru dan mengeluarkan pengecualian jika muncul. Saya harap kita semua bisa setuju bahwa meskipun ada ketergantungan seperti itu, jsdom tidak boleh selamanya menyerah untuk menambahkan fitur baru dalam rilis kecil.

Situasi di sini tidak terlalu drastis, tetapi tampaknya serupa. Saya belum melihat siapa pun melacak kode Jest yang menyinggung, jadi sulit untuk mengatakan dengan tepat, tetapi tampaknya mereka melakukan operasi yang secara eksplisit dilanggar oleh proses normal pengembangan jsdom, dan yang tidak akan berfungsi di web browser yang mengimplementasikan localStorage.

Saya menyadari ini adalah situasi yang sulit bagi Anda yang terkena dampak, bukan karena kesalahan Anda sendiri, oleh interaksi yang tidak menguntungkan mengenai bagaimana ketergantungan langsung Anda (ab) menggunakan ketergantungan tidak langsung Anda. Tapi saya berharap ini dapat diatasi pada tingkat yang tepat, memperbaiki kode kereta Jest, alih-alih menghapus fitur yang berguna dari semua pengguna jsdom karena satu bug tanggungan.

Balasan asli untuk OP, untuk konteks:

Sepertinya Anda tidak menyetel URL dalam pengujian Anda, tetapi Anda, atau mungkin Jest, sedang mengakses window.localStorage . Pengelola Jest mungkin tahu lebih banyak tentang perbaikan terbaik, tetapi saya mendengar ada cara untuk mengatur URL dalam pengujian Jest Anda?

Ini adalah masalah yang sangat baru yang tampaknya muncul dengan 11.12.0 . Saya mendapatkan kesalahan yang sama saat menggunakan jest dengan enzyme .

Ya, saya mulai mengalami masalah setelah memutakhirkan dari 11.11.0 ke 11.12.0 . Menyetel testURL di konfigurasi lelucon memperbaiki masalah.

@ben-mckernan Hai, Apa URL yang Anda berikan untuk memperbaikinya ??

@gokulkrishh saya set ke http://localhost/ tetapi URL yang valid tampaknya berfungsi.

Saya kira ini mungkin khusus untuk Enzim, karena Enzim melakukan hal yang secara eksplisit diperingatkan oleh jsdom docs untuk tidak dilakukan ? Tidak terlalu mengejutkan bahwa pecah pada rilis kecil, sayangnya :(

Ini juga menghancurkanku :(

@ben-mckernan Terima kasih 👍

(Komentar "+1" akan ditandai sebagai spam; mengirim email ke semua orang di utas masalah tidak membantu.)

Permintaan maaf. Hanya mencoba untuk membantu.

Dapat mengonfirmasi penambahan testURL ke jestConfig seperti yang disarankan @ben-mckernan untuk memperbaikinya.

Dan kami juga menggunakan Enzim, jika itu membantu mengkonfirmasi intuisi Anda.

Untuk pengujian aplikasi elektron, saya hanya mengaturnya ke "file:/" yang juga berfungsi.

@miamollie Saya menambahkan testURL sesuai saran @ben-mckernan (Menggunakan Jest + Enzyme, tidak yakin enzimnya terkait. Kesalahan berasal dari jest-environment-jsdom yang menggunakan jsdom). Karena itu beberapa file pengujian saya yang lain gagal. Hanya FYI. Lihat apakah itu berhasil untuk Anda. Kasus pengujian Anda mungkin berbeda dari kasus saya (TestURL mungkin cocok untuk Anda).

@domenic Saya hanya menggunakan lelucon. Jadi saya tidak yakin bahwa ini adalah masalah enzim.

@gokulkrishh Ya, sama, itu menghentikan kesalahan keamanan Penyimpanan lokal tetapi membuat beberapa tes lain gagal.

@ben-mckernan solusi memperbaikinya. Terima kasih!

@ben-mckernan Saya menggunakan lelucon dalam pengaturan sudut (dengan lelucon-preset-sudut), bug yang sama, solusi yang sama. Jadi ini bukan masalah enzim.

Sepertinya Jest perlu mengubah nilai default testURL agar ini dikurangi (saat ini about:blank ).

@DcsMarcRemolt Saya baru saja Jest menggunakan modul dependensi yang disebut jest-environment-jsdom dalam package.json --> "jsdom": "^11.5.1" caret(^) karena npm ini telah menginstal jsdom sebagai 11.12.0 (yang merupakan versi baru yang diterbitkan hari ini). Jadi itu rusak untuk sebagian besar pengguna. Masalah sudah dibuat dalam lelucon dan ditautkan di sini. Hati-hati untuk itu.

Saya akan membuka kembali masalah ini agar lebih terlihat. Lihat komentar pertama dari Domenic untuk solusinya.

Menambahkan yang berikut ke konfigurasi jest di package.json:
"testEnvironment": "node"
memecahkan masalah bagi saya.
Kredit ke @blu3printchris untuk membantu menyelesaikan ini.

Saya tidak bisa lagi menimpa dan mengejek implementasi JSDOM di localStorage sejak pembaruan ini.

Karena ini adalah perubahan yang tidak disengaja bagi banyak orang, mungkin opsi pengendalian kerusakan terbaik adalah:

  • Kembalikan perubahan ini.
  • Rilis versi 11.12.1 dengan perubahan yang dikembalikan untuk memulihkan perilaku yang diharapkan.
  • Tarik atau hentikan versi 11.12.0 dengan peringatan.
  • Jika perilaku baru diinginkan apa adanya, lepaskan 12.0.0 untuk menunjukkan ada perubahan yang melanggar.

Terima kasih, tetapi untuk saat ini saya tidak percaya itu jalan terbaik ke depan. Ini bukan perubahan besar bagi jsdom untuk mengimplementasikan fitur platform web baru; itu versi minor.

Ada kemungkinan bagi tanggungan, bahkan tanggungan yang digunakan secara luas, untuk menulis kode yang tidak menguntungkan yang mendeteksi fitur baru dan mengeluarkan pengecualian jika muncul. Saya harap kita semua bisa setuju bahwa meskipun ada ketergantungan seperti itu, jsdom tidak boleh selamanya menyerah untuk menambahkan fitur baru dalam rilis kecil.

Situasi di sini tidak terlalu drastis, tetapi tampaknya serupa. Saya belum melihat siapa pun melacak kode Jest yang menyinggung, jadi sulit untuk mengatakan dengan tepat, tetapi tampaknya mereka melakukan operasi yang secara eksplisit dilanggar oleh proses normal pengembangan jsdom, dan yang tidak akan berfungsi di web browser yang mengimplementasikan localStorage.

Saya menyadari ini adalah situasi yang sulit bagi Anda yang terkena dampak, bukan karena kesalahan Anda sendiri, oleh interaksi yang tidak menguntungkan mengenai bagaimana ketergantungan langsung Anda (ab) menggunakan ketergantungan tidak langsung Anda. Tapi saya berharap ini dapat diatasi pada tingkat yang tepat, memperbaiki kode kereta Jest, alih-alih menghapus fitur yang berguna dari semua pengguna jsdom karena satu bug tanggungan.

Terima kasih telah mengklarifikasi. Saya setuju bahwa jika masalahnya berasal dari penggunaan jsdom dengan cara yang tidak didukung seperti yang dijelaskan di atas, maka secara teknis itu bukan pelanggaran semver dan lelucon harus merilis tambalan.

Solusi saya, gunakan daftar hitam saat mengulang semua properti jsdom dan menambahkannya ke global.


Kode

const { JSDOM } = require('jsdom');
const Node = require('jsdom/lib/jsdom/living/node-document-position');

// We can use jsdom-global at some point if maintaining these lists is a burden.
const whitelist = ['HTMLElement', 'Performance'];
const blacklist = ['sessionStorage', 'localStorage'];

function createDOM() {
  const dom = new JSDOM('', { pretendToBeVisual: true });
  global.window = dom.window;
  global.Node = Node;
  global.document = dom.window.document;
  // Not yet supported: https://github.com/jsdom/jsdom/issues/317
  global.document.createRange = () => ({
    setStart: () => {},
    setEnd: () => {},
    commonAncestorContainer: {
      nodeName: 'BODY',
      ownerDocument: document,
    },
  });
  global.navigator = {
    userAgent: 'node.js',
  };

  Object.keys(dom.window)
    .filter(key => !blacklist.includes(key))
    .concat(whitelist)
    .forEach(key => {
      if (typeof global[key] === 'undefined') {
        global[key] = dom.window[key];
      }
    });
}

module.exports = createDOM;


Jangan memasukkan jsdom global ke dalam Node global

Yah, aku lulus untuk saat ini. Saya perlu tes untuk dijalankan di jsdom dan di browser nyata. Ini adalah pendekatan paling sederhana yang dapat saya pikirkan, telah berhasil selama bertahun-tahun. Saya tidak melihat potensi yang sama dalam alternatif yang disarankan.
Menggunakan jsdom-global juga bisa berhasil.

Yah, aku lulus untuk saat ini. Saya perlu tes untuk dijalankan di jsdom dan di browser nyata.

Jika pengujian Anda dapat berjalan di dalam "browser asli", mereka juga dapat berjalan dengan cara yang sama di jsdom - cukup sediakan HTML yang sama. Dengan menetapkan ke global, Anda memperkenalkan kompleksitas dan perbedaan tambahan dibandingkan dengan cara Anda menjalankan pengujian di browser.

FYI Saya mengalami masalah yang sama dengan Mocha, bukan Jest, setelah memutakhirkan jsdom ke 11.12.0 .

Hai, Saya hanya ingin memahami mengapa perubahan diperkenalkan di tempat pertama.

Kasus penggunaan saya hanya untuk menegaskan suatu fungsi untuk memastikan saya menulisnya dengan benar, sesederhana:

const fib = require('./index');

test('Fib function is defined', () => {
  expect(typeof fib).toEqual('function');
});

test('calculates correct fib value for 1', () => {
  expect(fib(1)).toEqual(1);
});

screenshot 2018-07-30 21 10 39

namun hasil pengujian tampaknya merupakan pesan kesalahan bahwa saya baru saja melakukan beberapa aplikasi besar di React dengan perpustakaan Redux dan hal-hal seperti itu, sedangkan yang sebenarnya adalah saya hanya menguji fungsi sesederhana

//index.js, yes, only one line, no react no redux no enzyme 
function add(a, b) {}

Omong-omong, testURL dan testEnvironment "hack" tidak bekerja untuk saya. Ini adalah package.json saya:

    "jest": {
        "testURL": "http://localhost/",
        "testEnvironment": "node"
    },

jadi pertanyaan saya adalah mengapa semua kerumitan untuk memperkenalkan perubahan yang melanggar sementara kadang-kadang kami hanya menginginkan pelari uji yang hanya "berfungsi"

@khmy2010 Kode dan pertanyaan Anda melibatkan Jest lebih dari yang mereka lakukan jsdom. Saya sarankan Anda membuat masalah di repositori mereka .

Pesan kesalahan yang sama dengan op dan hampir semua orang di sini (kecuali saya tidak
menggunakan enzim). Jika tidak terkait, saya harus membuka masalah dengan bercanda. Maaf tentang
itu.

Pada 30 Juli 2018 21:32, "Zirro" [email protected] menulis:

@khmy2010 https://github.com/khmy2010 Kode dan pertanyaan Anda melibatkan
Bercanda lebih dari yang mereka lakukan jsdom. Saya sarankan Anda membuat masalah di mereka
repositori https://github.com/facebook/jest sebagai gantinya.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/jsdom/jsdom/issues/2304#issuecomment-408864079 , atau bisu
benang
https://github.com/notifications/unsubscribe-auth/AVrB3uOLy7l4JKbStKWPtGi0oHfAaQbYks5uLwrpgaJpZM4Vi8gP
.

Jika Anda membuat instance jsdom , Anda dapat meneruskan url khusus sebagai parameter kedua:

const url = 'http://localhost';
const jsdom = new JSDOM('<!doctype html><html><body></body></html>, { url });

Ini mungkin berguna jika Anda menggunakan Enzyme + Mocha @srodrigo

Ini merusak infrastruktur yang ada. Ini harus rilis mayor 12.0.0 dan bukan rilis minor 11.12.0. Rilis kecil tidak boleh merusak kode yang ada.

Domenic menjelaskan dalam komentar ini (jika tidak muncul saat mengklik tautan, gulir ke atas dan muat komentar tersembunyi) mengapa ini tidak dilihat sebagai perubahan yang melanggar. Kode dari paket dependen yang melakukan hal-hal yang

Selain perbaikan di atas, saya harus menambahkan ini ke root konfigurasi pengujian: --env=jsdom

Menambahkan yang berikut ke jest.config.js saya

testURL: 'http://localhost',

memecahkan masalah. Terima kasih!

(Pengelola lelucon di sini.) Apakah menurut Anda masuk akal dari sudut pandang Jest untuk mengubah dari about:blank default ke misalnya localhost ?

Tidak yakin apakah saya cukup pintar untuk menyuarakan pendapat saya tentang ini, tetapi dari sudut pandang pengembang saya akan mengatakan localhost lebih masuk akal, about:blank adalah kasus yang tidak pernah menjadi kenyataan. Kami sedang menguji aplikasi kami yang hampir tidak pernah ada tentang: url

Tim Jest telah menambahkan nilai default yang lebih cerdas untuk testURL : https://github.com/facebook/jest/pull/6792

@SimenB saya akan mengatakan itu ide yang bagus.

Mendapatkan kesalahan yang sama dengan OP, tetapi dalam situasi saya itu telah menyebabkan BANYAK masalah. Kami mengunci versi paket yang kami gunakan, dan kami hanya dapat mengubahnya di awal siklus rilis. Kami saat ini mendekati akhir siklus rilis, jadi lingkungan pengembang kami memiliki versi semua paket dan dependensinya sekitar sebulan yang lalu, tetapi ketika kami meminta server build membuat build, itu mengambil versi saat ini dari semua paket. Jadi sementara semua tes lulus secara lokal, semuanya gagal di server build.

Kami menggunakan opsi "setupTestFrameworkScriptFile" di file konfigurasi jest untuk melakukan beberapa pengaturan, termasuk polyfill untuk (antara lain) localStorage dan sessionStorage (karena kami menggunakan keduanya di aplikasi kami). Ini pada dasarnya window.localStorage = window.localStorage || { ... } , dan sama untuk sessionStorage, di mana ... adalah sekelompok fungsi tiruan. Sekarang tidak ada yang berfungsi, bahkan jika saya mengubahnya untuk selalu menimpa default ( window.localStorage = { ... } ).

Selain itu, kami memiliki pengujian unit yang secara khusus menguji hal-hal seperti sessionStorage.getItem dipanggil, tetapi setelah menyetel "testURL" ke " http://localhost ", seperti yang disarankan di atas untuk menyelesaikan kesalahan penyimpanan lokal, semuanya gagal. Meskipun kita memiliki window.sessionStorage.getItem = jest.fn(); , melakukan expect(window.sesssionStorage.getItem).toHaveBeenCalled() gagal dengan mengatakan bahwa itu bukan fungsi tiruan.

Meskipun saya setuju bahwa penambahan fitur adalah perubahan versi kecil, dan bukan perubahan yang melanggar, ketika itu adalah sesuatu yang merupakan bagian standar dari browser, dan implementasi baru tampaknya tidak dapat diganti atau diejek, itu _adalah_ perubahan yang melanggar .

Satu-satunya solusi yang saya temukan untuk masalah saya adalah menambahkan jsdom ke package.json saya dan menentukan versi 11.11.0. Ini tidak ideal, dan akan menyebabkan pekerjaan tambahan nanti ketika kami meningkatkan paket lagi, tetapi setidaknya untuk saat ini kami tidak diblokir.

Jika Anda memiliki kode, misalnya kode tiruan, yang berfungsi di browser tetapi tidak di jsdom, ajukan masalah baru mengikuti template masalah dan kami dapat menyelidikinya. Sepengetahuan saya, localStorage di jsdom sama persis dengan yang ada di browser.

Saya menyarankan untuk tidak menjalankan versi yang berbeda di server build Anda saat pengembang Anda sedang berjalan.

"Saya menyarankan untuk tidak menjalankan versi yang berbeda di server build Anda karena pengembang Anda sedang berjalan."

Meskipun secara teori kedengarannya bagus, kecuali setiap pengembang paket berhenti menggunakan "^" saat menentukan versi ketergantungan, atau kami mengkomit ribuan folder di folder node_modules kami, itu tidak akan pernah terjadi. Dari satu mesin pengembang ke mesin pengembang berikutnya kemungkinan akan ada sedikit perbedaan dalam beberapa dependensi satu atau dua tingkat ke bawah. Yang bisa saya lakukan adalah menentukan versi persis dari paket-paket yang merupakan dependensi langsung dari aplikasi kita.

Sepenuhnya setuju dengan @mrobrian tentang "^". Hal paling gila yang pernah ada. npm harus menghapus cara ini untuk menggambarkan dependensi.

@domenic solusi dengan packge-lock.json dan yarn.lock rusak oleh desain. Mungkin itu membantu dengan versi, tetapi kemudian membuat masalah lain dengan tinjauan kode dan penggabungan dan seringkali Anda perlu membuat ulang file ini dengan penghapusan. Tidak apa-apa jika dependensi jarang diperbarui, tetapi kami sangat sering memperbarui.

Oleh karena itu .npmrc :

save-exact = true
package-lock = false

itu membantu saya menambahkan baris baru ini ke package.json:

"jest": {
    "verbose": true,
    "testURL": "http://localhost/"
  },

Jika Anda menggunakan jsdom, pastikan Anda menyertakan url

const dom = JSDOM baru(``, {
url: "https://example.org/",
});

Apakah pengembang lelucon ingin mengomentari mengapa "testEnvironment": "node" sekarang diperlukan untuk proyek CLI/node (untuk menghindari kesalahan localStorage ) padahal sebelumnya tidak diperlukan? Apakah itu bug?

Jika ini entah bagaimana dirancang, itu benar-benar membutuhkan pesan kesalahan yang lebih baik! Saya mendapatkan kesalahan ini di kedua proyek saya yang menggunakan Jest - dua proyek non-browser sederhana dengan sedikit dependensi. Mereka tentu saja tidak menggunakan jsdom/localStorage.

Ini bukan tempat yang tepat untuk mengajukan pertanyaan kepada pengembang Jest - jsdom adalah proyek terpisah. Yang mengatakan, komentar di atas sudah berisi jawaban atas pertanyaan Anda.

package.json

   ...
  "jest": {
    "testEnvironment": "node",
    "roots": [
      "test/javascript"
    ]
  },

Ini bekerja untuk saya.

@p8ul benar, jangan lupa untuk menentukan " http://localhost " (URL set default sejak Jest 23.5.0, lihat #6792):

const dom = new JSDOM(``, {
url: "http://localhost",
});

Keseluruhan bekerja untuk saya.
Bahkan tidak perlu menambahkan:

"testEnvironment": "node"

jest 23.5.0 sekarang menyertakan perbaikan untuk ini, jadi solusinya tidak lagi diperlukan:

https://github.com/facebook/jest/issues/6766#issuecomment -412516712

Mirip dengan @mica16 https://github.com/jsdom/jsdom/issues/2304#issuecomment -412663502

const dom = new JSDOM(``, {
  url: "http://localhost",
});

Adalah satu-satunya perubahan yang perlu kami lakukan untuk menghindari kesalahan ini.

Kami menggunakan moka/enzim. Tidak ada lelucon yang disertakan dalam rangkaian pengujian kami.

Pengaturan --env node pada baris perintah juga berfungsi.

@gokulkrishh saya set ke http://localhost/ tetapi URL yang valid tampaknya berfungsi.

"location.href" akan menyenangkan kalau begitu. :)

@domenic Saya sarankan memperbarui komentar Anda di bagian atas untuk mengatakan bahwa pengelola Jest memperbaiki bug ini di versi 23.5.0: https://github.com/facebook/jest/issues/6766#issuecomment -412516712

Saya melakukan pengaturan testURL untuk jest-config ke http://localhost berfungsi.

tambahkan kunci dalam file konfigurasi dan coba lagi "bercanda": { "testURL": " http://localhost%26quot%3B/ },
gunakan ip-port alih-alih localhost
Ini mungkin menyelesaikan masalah

Saya mengalami masalah setelah menemukan beberapa masalah keamanan saat menjalankan npm audit . Setelah memperbaikinya menggunakan npm audit fix saya mengalami masalah ini.

Karena ini telah diperbaiki di Jest selama beberapa waktu, mari kita coba menutupnya dan melihat apakah kita berakhir dengan banyak duplikat, atau apakah semuanya sudah cukup baik.

"bercanda": {
"verbose": benar,
"testURL": " http://localhost/ "
}
Tambahkan cuplikan kode ini di file package.json.
Itu berhasil untuk saya.

anda juga dapat menambahkan ini ke tes yang terpengaruh jika jsdom tidak diperlukan di sana

``` javascript 1.6
/**

  • @simpul lingkungan bercanda
    */

it('tes saya', () => {
harapkan(2 + 2).menjadi(4);
});
```

Saya menguji kedua opsi:

1) Tambahkan ini ke bagian atas file pengujian:

/**
 * @jest-environment node
 */

2) Tambahkan bait ini ke package.json:

"jest": {
    "testURL": "http://localhost/"
  }

Kedua opsi berhasil.

Saya membuatnya bekerja dengan menambahkan file package.json:

"jest": {
    "verbose": true,
    "testURL": "http://localhost/"
  }

@gokulkrishh saya set ke http://localhost/ tetapi URL yang valid tampaknya berfungsi.

Saya seorang pemula. Bisakah Anda memberi tahu saya di mana tepatnya di Jest.config.js saya mengatur testURL?

@haiphu Di mana saja di jest.config.js seperti di bawah ini

{
"testURL": "http://localhost/"

// Your other config
}

Saya menambahkan di bawah ini ke package.json saya dan berfungsi dengan baik sekarang :)

  "jest": {
    "testURL": "http://localhost/"
  },

Tidak yakin mengapa, tetapi kesalahan saya disebabkan oleh memiliki versi TypeScript yang berbeda.

Saya memiliki pengaturan mono-repo dengan ruang kerja benang + lerna. Semua paket memiliki typescript@^3.3.3 di package.json mereka. Saya menambahkan paket baru dan menginstal typescript@^3.5.3 . Ketika saya menjalankan tes dalam paket yang ada, saya mendapatkan kesalahan ini.

Jika saya memindahkan semua paket ke versi yang sama - baik typescript@^3.3.3 atau typescript@^3.5.3 , kesalahan akan hilang. Saya tidak perlu mengutak-atik testURL .

@tylerreece22 @gokulkrishh Bekerja untuk saya! 😄

Bagi mereka yang bertanya-tanya apa yang dilakukan oleh arahan konfigurasi testURL , lihat https://jestjs.io/docs/en/configuration#testurl -string

Bagi mereka yang mengatur opsi pada jsdom secara langsung (saat menggunakan Mocha misalnya). Letakkan ini di setup.js Anda:

let jsdom = require('jsdom-global')(
    undefined,
    {
        url: "http://localhost"
    }
);

Anehnya .. Saya tidak memiliki jsdom yang digunakan .. Saya menggunakan lelucon untuk menguji beberapa paket node saja namun kesalahan ini mulai memblokir CI ketika memutakhirkan versi lelucon ke yang terbaru dalam kisaran ^11 .. Saya yakin orang lain melihat masalah serupa.. sejauh ini tidak ada perubahan yang direkomendasikan yang tampaknya memperbaikinya

jika Anda tidak menggunakan jsdom maka Anda ingin mengatur properti konfigurasi lelucon testEnvironment menjadi node . (tidak perlu menyentuh testURL )
https://jestjs.io/docs/en/configuration#testenvironment -string

Bagi siapa pun yang mencari perbaikan yang sebenarnya, ini new JSDOM('', { url: 'https://localhost' })

Coba gunakan ini di file package.json Anda

"bercanda": {
"verbose": benar,
"testURL": " http://localhost/ "
}

Mengapa pengaturan url tidak berfungsi untuk saya ... saya menggunakan reaksi asli .. apakah ada hal lain yang saya lewatkan?

Mengapa pengaturan url tidak berfungsi untuk saya ... saya menggunakan reaksi asli .. apakah ada hal lain yang saya lewatkan?

Kami memiliki masalah yang sama. Dalam aplikasi kami, kami memiliki kode ini

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>');

Ternyata kami harus menambahkan URL ke konstruktor JSDOM

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>', {
  url: 'http://localhost/',
});

Itu memperbaiki masalah.

Mengapa pengaturan url tidak berfungsi untuk saya ... saya menggunakan reaksi asli .. apakah ada hal lain yang saya lewatkan?

Kami memiliki masalah yang sama. Dalam aplikasi kami, kami memiliki kode ini

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>');

Ternyata kami harus menambahkan URL ke konstruktor JSDOM

const { JSDOM } = require('jsdom');
const jsdom = new JSDOM('<!doctype html><html><body></body></html>', {
  url: 'http://localhost/',
});

Itu memperbaiki masalah.

Ini bekerja untuk saya terima kasih banyak! menempatkan url di konfigurasi lelucon tampaknya tidak berfungsi dengan reaksi asli. menempatkan url di konstruktor de jsdom berhasil.

Perbarui lelucon dari 22 menjadi 26 masalah tetap.

cukup gunakan lelucon versi terbaru. saat ini saya menggunakan 26.5.0 pada tahun 2020 dan masalah saya terpecahkan

Coba gunakan ini di file package.json Anda

"bercanda": {
"verbose": benar,
"testURL": " http://localhost/ "
}

Itu testURL adalah URL default, yang berarti itu tidak menyelesaikan masalah, setidaknya tidak dengan Jest 26.x . Saya harus melakukan apa yang @zuccha lakukan untuk menyiasatinya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat