[狀況記錄] 關於跑 Unit Test 時,顯示 SecurityError 錯誤訊息 (解決)
TWGD / 2018-09-03
當時 fork 第一期的教材並 clone 專案到本機,照導師的影片教學一步步操作,code 也沒有寫錯,但不知怎麼回事,不僅無法看到 pass 的綠燈,還一直跑出 SecurityError 訊息,認真讀 command line 也一點頭緒也沒有,一度懷疑自己是不是遇到平行時空。我之前在 這篇心得 中也有記錄這個狀況。
狀況:跑 Unit Test 時,顯示 SecurityError 錯誤訊息
SecurityError: localStorage is not available for opaque origins
嘗試解決的過程:
package.json
裡添加:{
"jest": {
"verbose": true,
"testURL": "<http://localhost/>"
},
}
結果:
關於這個 error 的可能原因:
這則 Bug Report 整理了簡要的敘述:與 JSDom 11.12 這個版本更新有關。
我對這則 Bug Report 的理解是:JSDom 11.12 支援了 window.localStorage
等其他功能。推測 Jest 採用了這個新版本,使得既有版本的 預設 URL
造成錯誤。(有理解錯誤的話請導師指正~)
更新 1:目前這個 Bug 似乎已被修復 (?)
Jest 23.5.0 已經不會遇到問題:
最近新增了新專案,Jest 版本是 23.5.0,跑 Unit Test 的時候,已不會遇到這個狀況。 JSDom 發表了 12.0.0版本更新,似乎已經修復了這個 Bug。
新專案 Run npx envinfo --preset jest
結果:
System:
OS: OS X El Capitan 10.11.6
CPU: x64 Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Binaries:
Node: 8.11.3
npm: 5.6.0
npmPackages:
jest: ^23.5.0 => 23.5.0
Jest 22.4.4 版本還是一樣問題:
clone「mentor-program-2nd-twgd」下來後,npm 用原本 package.json 檔裡的紀錄載回套件,又遇到了一樣的問題。
「mentor-program-2nd-twgd」專案 Run npx envinfo --preset jest
結果:
System:
OS: OS X El Capitan 10.11.6
CPU: x64 Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Binaries:
Node: 8.11.3
npm: 5.6.0
npmPackages:
jest: ^22.4.4 => 22.4.4
更新 2:這次「mentor-program-2nd-twgd」又遇到這個問題,我嘗試了兩個作法:
作法 (1):
在 package.json
裡添加:
{
"jest": {
"verbose": true,
"testURL": "<http://localhost/>"
},
}
作法 (2):
想說 23.5.0 版本 Jest 沒問題,輸入以下指令 update 看看:
npm install --save-dev jest@23.5.0
運行 Unit Test 居然又有錯誤訊息 (崩潰):
Couldn't find preset "es2015" relative to directory
仔細看了一下,這個錯誤訊息有點眼熟,好像跟 babel 有關,Google 確定了一下問題,需要安裝 babel-preset-es2015
,輸入以下指令裝 babel-cli
跟 babel-preset-es2015
:
npm install --save-dev babel-cli babel-preset-es2015
更新 3:導師 huli 的解決辦法
在 package.json
裡添加:
"test": "jest --env=node"
把運行環境設定到 node
。
查到一則相關的 PR 表示:較小版本預設運行環境是 jsdom
,把環境改成 node
運行就可以解決這個問題。