した。

エラーになるコード

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: スキームを使うときに起こります)。例えば、ユーザーがブラウザー設定で特定オリジンへのデータ永続化のパーミッションを拒否していることもあります。

参考