あるクリックイベントの中で、最後window.location.hrefで画面遷移させているコンポーネントをテストしたい
JestはNode環境で動いているので、何もせずテストでexpect(window.location.href).toBe(expected)
と書いてもWeb標準のwindow
がないためエラーになってしまう
そこで、jest-environment-jsdom
を利用する
jest-environment-jsdom
については以下で調べた
uga-box.hatenablog.com
ただこれだけでもうまくいかなかった
Error: expect(received).toBe(expected) // Object.is equality Expected: "/expect/path/" Received: "http://localhost/"
これは検証したいwindow.location.href
がテスト対象のロジック内で更新しても、 http://localhost/
のまま変わらないというもの
原因を調べたらjest-environment-jsdom
でモックされたwindow.location.href
はread-onlyになっているためだった
なので、Object.defineProperty
を使って上書きできるようにしてあげる必要があった
次の処理をテスト前に記述しておくことでwindow.location.href
に値を検証することができるようになった
Object.defineProperty(window, "location", { value: { href: "http://example.com", }, });