した。
エラーになるコード
const { JSDOM } = require('jsdom');
const sinon = require('sinon');
const dom = new JSDOM();
dom.window.localStorage.setItem('foo', 'bar');
// SecurityError: localStorage is not available for opaque origins
解決
new JSDOM() のところで、 url を適当に設定してやれば解決します。
const dom = new JSDOM('', { url: 'https://localhost' });
原因
件の url の初期値が about:blank で、URLがそれだと localStorage が駄目なので。
試しにブラウザーで about:blank を開いてコンソールから localStorage を触ろうとしても同じようなエラーが出ます。
MDNに説明があります。
例外
SecurityError- リクエストがポリシーの決定に反している、またはオリジンが妥当な scheme/host/port tupleでない (これは例えば、オリジンが
file:やdata:スキームを使うときに起こります)。例えば、ユーザーがブラウザー設定で特定オリジンへのデータ永続化のパーミッションを拒否していることもあります。