自分のプロジェクトを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
接頭辞を付けてアプリケーションにアクセスしている場合は、(jest.config.js
内の)jest設定を次のように更新する必要があります。
"jest": {
"verbose": true,
"testURL": "http://localhost/"
}
Jestの設定がまだない場合は、その設定を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/",
// ...
}]
}
私はこれを大規模なモノレポにまとめました(それ以外の場合はjsdomを必要としなかった単体テストで)。 jest.config.js
(またはpackage.json
と同等のもの)に次の項目を明示的に設定することで、この問題も軽減されました。
module.exports = {
testEnvironment: 'node'
}
更新:Nicolasが以下に述べるように(ありがとう!)、設定ファイルを使っていないのであれば、以下のフラグを追加することができます。
jest --testEnvironment node
# or
jest --env=node
どの環境(--env
)を使用するのかを指定する必要があります。
package.json
でjest
コマンドを実行するときは、環境(jsdom
またはnode
)を指定する必要があります。例えば:
"scripts": {
"jest": "jest --env=node --colors --coverage test",
"test": "npm run jest"
},
これはあなたのために働くはずです!
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/" });
私のJestの設定にtestURL: "http://localhost"
を追加するという一流の答えの中での提案は私にはうまくいきませんでした。しかし、 jsdomオブジェクトの作成時にURLを渡すというjsdom GitHubのディスカッションからのこの提案 は行った。
const url = 'http://localhost';
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', { url });
これは愚かに聞こえるかもしれませんが、私にとっては、npm update
を付けてランダムパッケージを誤ってインストールしたために問題が発生しました。私はnpm install
を実行してからnpm update
を実行していましたが、npm install
のみ実行したはずです。 node_modules
ディレクトリを削除し、npm install
を再度実行することで問題を解決しました。
enzyme
をjest
と統合するとき、これは私にポップアップしました。 Github Issue Discussion は上記と同じ、つまり追加することを示唆しています
"testURL": "http://localhost/"
jestの設定へ。しかし、これは酵素によっても引き起こされることを知っておくのは良いことです。私にとってそれはReact v15とv15アダプターでした。
React JSを使っている間は何もする必要はありません。 JESTを配置してテスト環境をセットアップするのは、create-react-appのデフォルトの動作です。以下の実行で、テストの成功または失敗を示し始めます、
nPMテスト
テストカバレッジが必要な場合は、単にpackage.jsonファイルに以下を追加する必要があります。
"test": "react-scripts test --coverage" package.jsonの "script"は次のようになります。
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --coverage",
"eject": "react-scripts eject"
}