Jest SecurityError: लोकलस्टेज अपारदर्शी उत्पत्ति के लिए उपलब्ध नहीं है


144

जब मैं कमांड के साथ अपना प्रोजेक्ट चलाना चाहता हूं npm run test, तो मुझे नीचे त्रुटि मिली। इसके उत्पन्न होने का कारण क्या है?

FAIL
 Test suite failed to run

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

आप अपने एप्लिकेशन को कैसे एक्सेस कर सकते हैं? .. मेरा मतलब है, क्या आप इसे एक्सेस कर रहे हैं, जैसे http://localhost:port...?
डेविड आर।

यह टेस्ट रनर के साथ समस्या है, @DavidR, उन्होंने जारी किया है >>> npm रन टेस्ट <<<
मार्टिन चाओव जूल

@MartinChaov यप मुझे पता है कि। मैं उसके उत्तर को देखना चाहूंगा ताकि उसके jestकॉन्फिग में कुछ गड़बड़ हो तो जांच कर सके :-)
डेविड आर।

1
मैंने अभी इसे स्वयं चलाना शुरू किया है ... मैं कोड में स्थानीय-भंडारण का उपयोग नहीं कर रहा हूं। क्या आपका कोड ts-jest का उपयोग कर रहा है?
k2snowman69

@ k2snowman69 कृपया मेरा उत्तर देखें और अपनी टिप्पणी पोस्ट करें।
डेविड आर।

जवाबों:


139

यदि आप किसी http://localhostउपसर्ग के साथ अपने एप्लिकेशन को एक्सेस कर रहे हैं, तो आपको अपने जेस्ट कॉन्फ़िगरेशन (जैसे आपके jest.config.js) में अपडेट करने की आवश्यकता है ,

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

यदि आपके पास पहले से ही कोई जेस्ट कॉन्फिगरेशन नहीं है, तो अपने कॉनफ़िगरेशन को अपने में शामिल करें package.json। उदाहरण के लिए:

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

या में jest.config.js:

module.exports = {
  verbose: true,
  testURL: "http://localhost/",
  ...
}

या यदि आपने projectsकॉन्फ़िगर किया है:

module.exports = {
  verbose: true,

  projects: [{
    runner: 'jest-runner',
    testURL: "http://localhost/",

    // ...
  }]
}

17
हां यह मेरे लिए काम किया ... हालांकि मुझे यह समझ में नहीं आया कि मुझे इसकी आवश्यकता क्यों है और न ही यह नवीनतम अपग्रेड से पहले क्यों काम कर रहा था
k2snowman69

1
यह चर्चा jest
गीथूब

2
आप अपनी npm स्क्रिप्ट में cli विकल्प का उपयोग कर सकते हैं jest --testURL=\"http://localhost\":। उपयोगी है यदि आप किसी अन्य वातावरण (मेरे लिए प्रतिक्रिया-स्क्रिप्ट) के कारण वैश्विक jest कॉन्फ़िगरेशन सेट नहीं कर सकते।
बुरिच

मैं प्रतिक्रिया मूलक पर काम कर रहा हूं। मेरे लिए भी testUrlकाम किया।
जिमित पटेल

78

मैं सिर्फ एक बड़े monorepo (इकाई परीक्षणों में, कि अन्यथा jsdom की आवश्यकता नहीं होगी) में फसल था। स्पष्ट रूप से निम्नलिखित को हमारे jest.config.js(या package.jsonसमतुल्य) में स्थापित करना भी उस समस्या को कम कर देता है:

module.exports = {
  testEnvironment: 'node'
}

अद्यतन: जैसा कि निकोलस ने नीचे उल्लेख किया है (धन्यवाद!), आप निम्नलिखित झंडे भी जोड़ सकते हैं यदि आप किसी भी विन्यास फाइल का उपयोग नहीं कर रहे हैं:

jest --testEnvironment node    
# or 
jest --env=node

3
यह मेरे लिए काम किया! यह उत्तर आपको चाहिए! धन्यवाद!
ब्लूप्रिंटचिस

ऐसा लगता है कि लेखक के पास नोड का वातावरण नहीं है - अपने मामले में उसे परीक्षण निर्धारित करना चाहिए: "jsdom"। यह मेरे लिए नवीनतम अपडेट के साथ काम करता है। आपके सुझाव के लिए धन्यवाद!
फिलिप मोहालर

3
जैसा कि नीचे कुछ अन्य उत्तरों में उल्लेख किया गया है, आप एक कॉन्फ़िगर फ़ाइल (या पैकेज.जॉन प्रॉपर्टी) की पीढ़ी को चलाकर jest --testEnvironment nodeया उसके शॉर्टहैंड jest --env=node, इंटेड को छोड़ सकते हैं।
निकोलस फेंटोन

2
यह स्वीकृत उत्तर होना चाहिए। यह त्रुटि के लिए अधिक उपयुक्त लगता है। इसके अलावा, यदि आप केवल स्क्रिप्ट का परीक्षण कर रहे हैं, तो यह परिभाषित करने के लिए कोई मतलब नहीं है testURL
डेस

16

आपको यह निर्दिष्ट करना होगा कि आप किस पर्यावरण ( --env) का उपयोग करने जा रहे हैं।

जब आप jestकमांड चलाते हैं तो आपको package.jsonपर्यावरण ( jsdomया node) निर्दिष्ट करना चाहिए । उदाहरण के लिए:

  "scripts": {
    "jest": "jest --env=node --colors --coverage test",
    "test": "npm run jest"
  },

यह आपके लिए काम करना चाहिए!


1
यदि आप jsdom का उपयोग कर रहे हैं, तो वही बात होती है चाहे आप envconfig या कमांडलाइन के माध्यम से निर्दिष्ट करें या नहीं । यह केवल जेस्ट के नवीनतम अपडेट के साथ आज ही शुरू हुआ। कृपया समाधान के लिए @ डेविड आर का उत्तर देखें यदि यह आपके लिए मामला है।
fisch2

7

यदि आप jsdom का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप url को शामिल करते हैं।

चेकआउट jsdom रिपॉजिटरी सरल विकल्प। https://github.com/jsdom/jsdom#simple-options

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

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

मेरे मामले में मेरी i ने अपनी jsdom कॉन्फ़िगरेशन फ़ाइल में उस कोड को जोड़ा। var jsdom = require('jsdom'); var exposedProperties = ['window', 'navigator', 'document']; const { JSDOM } = jsdom; const {document } = (new JSDOM('',{ url: "https://localhost/",})).window; global.document = document;
p8ul

+1 जबकि जेस्ट के बारे में विशेष रूप से नहीं, यह एक वैकल्पिक समाधान है और इसे अन्य सेटअप के लिए इस्तेमाल किया जा सकता है (क्योंकि यह त्रुटि कोड के लिए शीर्ष SO है, अन्य, मेरे जैसे, इस पृष्ठ को पाएंगे जो जेस्ट का उपयोग नहीं कर रहे हैं) प्रति @ dspacejs अच्छा सवाल है, यह एक अलग फाइल होगी जिसे आपके टेस्ट कमांड के जरिए बुलाया जाता है package.json। उदाहरण के लिए, इस कोड को एक testHelper.tsफ़ाइल में सहेजा जा सकता है और मोचा का उपयोग करके बुलाया जा सकता है scripts: { test-setup: 'mocha --compilers ts:ts-node/register,tsx:ts-nocde/register --require testHelper.ts --reporter progress' }:।
जम्बटुकि

4

testURL: "http://localhost"मेरे जेस्ट कॉन्फिग में जोड़ने के टॉप रेटेड जवाब में सुझाव मेरे लिए काम नहीं किया। हालाँकि, jsdom GitHub चर्चा से यह सुझाव , jsdom ऑब्जेक्ट बनाते समय एक URL पास करने से हुआ।

const url = 'http://localhost';

const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', { url });


0

यह मूर्खतापूर्ण लग सकता है, लेकिन मेरे लिए, समस्या का कारण था क्योंकि मैंने गलती से यादृच्छिक पैकेज स्थापित किए थे npm update। मैं भाग रहा था npm installऔर तब npm updateलेकिन मुझे केवल भागना चाहिए था npm install। मैंने node_modulesनिर्देशिका को हटाने और npm installफिर से चलाकर समस्या को ठीक किया ।


यह मेरे साथ संबंधित है, मैं वास्तव में npm installउद्यम प्रॉक्सी के कारण ठीक से समाप्त करने में सक्षम नहीं था । तो, पैटर्न अपूर्ण होगा npm installसमझना
जेड Khullah

0

React JS के साथ काम करते समय आपको कुछ भी करने की आवश्यकता नहीं है। यह JEST को जगह देने और परीक्षण वातावरण स्थापित करने के लिए create-react-app का डिफ़ॉल्ट व्यवहार है। नीचे चलने पर, यह परीक्षण की सफलता दिखाना शुरू कर देता है या असफल हो जाता है,

npm परीक्षण

यदि आप परीक्षण कवरेज चाहते हैं, तो आपको पैकेज.जॉन फ़ाइल में नीचे जोड़ना होगा

"परीक्षण": "प्रतिक्रिया-लिपियों का परीक्षण - खोज" अब पैकेज की आपकी "पटकथा" है।

"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --coverage",
"eject": "react-scripts eject"

}


0

मेरे enzymeसाथ एकीकृत होने पर यह पॉप अप हुआ jestGithub मुद्दा चर्चा के रूप में उपरोक्त एक ही पता चलता है, अर्थात् जोड़ने

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

jest config के लिए। हालांकि, यह जानना अच्छा है कि यह एंजाइम द्वारा भी ट्रिगर होता है। मेरे लिए यह रिएक्ट वी 15 और वी 15 एडॉप्टर था।


0

मेरे पास एक ही मुद्दा है और इसे अपनी package.jsonफ़ाइल में रखकर मेरे लिए काम किया:

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

0

Jest SecurityError: localStorageत्रुटि को हल करने के लिए आपको jest: { ... }अपने package.json फ़ाइल में भाग जोड़ना होगा

{

"name": "...",
"version": "..",
"main": "..",
"description": "...",
...

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

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.