ykokw.xyz blog logo

Blog Posts

No results for 'undefined'Powered by Algolia

jestのモックを使ってみる

  • テストしたいこととか前提

    • あるメソッドを呼び出して、条件によってはそのメソッド内の処理の一部(特定のメソッド)が呼び出されてないことを確認したい
    • 引数でcallbackを渡しているわけではない
// index.js
import { foo, bar } from './module';

export const foobar = mode => {
    if (mode === 'bar') {
        bar();
    } else {
        foo();
    }
}
// test.js
import { foo, bar } from './module';
import { foobar } from './index';

jest.mock('./module');

describe('index::foobar', () => {
    it('should not call foo method', () => {
        foobar('bar');
        expect(foo.mock.calls.length).toEqual(0);
    })
})
  • 引数で渡したcallbackメソッドが呼び出されるか、とかであればjest.fn()でモック関数を作成してcallbackとして渡せば良い
  • あるメソッドがimportしているモジュールのメソッドをモックしたい場合はモジュールごとjest.mock()でモックしてしまう
  • モック関数には.mockプロパティがついている

    • test.jsでインポートしているfoo / barメソッドは、インポート後にmockされているのでモック関数になっている
    • 期待する返り値を指定できたり呼び出し状況の確認に使える
    • mock.calls.lengthを確認すると、モックしたモジュールの特定メソッドが何回呼び出されたか確認できる

メモ

  • jest.mockがあると事前に依存関係をみつつ対象のモジュールをmockしてくれるのめっちゃ便利
  • テストのスコープが大きかったり、テストコードが壮大すぎるとmockしにくい&mockオブジェクトの確認がやりづらくなる

    • 単体テストくらいでmockするのが現実的かも

This content is built with Gatsby