6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jestでwindowオブジェクトの要素をmockする

Posted at

例えば window.navigator.languageを変更したい場合などに用いる

テスト対象コード例 isSupportedLang.ts


export function isSupportedLang(): boolean {
  return ['ja','en', 'fr'].indexOf(window.navigator.language) >= 0;
}

テストコード例 isSupportedLang.test.ts

import { isSupportedLang } from '../../src/utils/isSupportedLang';

describe("when browser language is not in [ja,en.fr]", () => {
  let windowSpy;
  beforeEach(() => {
    const originalWindow = { ...window };
    windowSpy = jest.spyOn(global, "window", "get");
    windowSpy.mockImplementation(() => ({
      ...originalWindow,
      navigator: {
        ...originalWindow.navigator,
        language: 'Mocked_language'
      }
    }));
  });
  afterEach(() => {
    windowSpy.mockRestore();
  });
  it('will be falsy', () => {
    expect(isSupportedLang()).toBeFalsy();
  });
});

describe("when browser language is fr", () => {
  let windowSpy;
  beforeEach(() => {
    const originalWindow = { ...window };
    windowSpy = jest.spyOn(global, "window", "get");
    windowSpy.mockImplementation(() => ({
      ...originalWindow,
      navigator: {
        ...originalWindow.navigator,
        language: 'fr'
      }
    }));
  });
  afterEach(() => {
    windowSpy.mockRestore();
  });
  it('will be truehy', () => {
    expect(isSupportedLang()).toBeTruthy();
  });
});

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?