この記事はもう古くなってしまいました。
Jest v28 以降では、下記のように JSDOM のオプションを指定することができるようになっています。
/**
* @jest-environment jsdom
* @jest-environment-options {"url": "https://example.com/"}
*/
it('detects PC', () => {
expect(location.hostname).toBe('example.com');
});
目的
Node.js におけるテストで Jest を使用する場合、DOM API が関連するテストは JSDOM の実装によって実行されます。この JSDOM はブラウザーと完全に同じ実装を持っているわけではなく、location.href
への代入ができないなどの制約があります。そのため Jest でもこれに合わせて JSDOM の API を使用したテストコードを記述する必要があります。
準備
Jest では JSDOM の API を直接参照することができないため、jest-environment-jsdom-global をインストールします。
$ npm i jest-environment-jsdom-global jest-environment-jsdom
package.json
の jest
の項目にも追加しておきます。
{
"jest": {
"testEnvironment": "jest-environment-jsdom-global"
}
}