開発覚書はてな版

個人的な開発関連の備忘録

【Jasmine】スパイ関数が実行されたかを確認する

概要

expect(mySpy).toHaveBeenCalled() を使用することでスパイ関数が実行されたかを確認できる。
また、 expect(mySpy).toHaveBeenCalledWith(args) でスパイ関数実行時に渡された引数の確認もできる。

スパイ関数に戻り値が必要な場合、spyOn().and.returnValue で設定する。

jasmine.github.io

実行環境

  • Node.js - 10.9.x

使用ライブラリ

  • Jamine - 3.3.x

サンプルソース

toHaveBeenCalled

describe('test', () => {
  it('toHaveBeenCalled', () => {
    // setup
    const func = { hoge: () => {} };
    spyOn(func, 'hoge');

    // exercise
    func.hoge();

    // verify
    expect(func.hoge).toHaveBeenCalled();
  });
});

toHaveBeenCalledWith

describe('test', () => {
  it('toHaveBeenCalledWith', () => {
    // setup
    const func = { hoge: (num: number) => {} };
    spyOn(func, 'hoge');

    // exercise
    func.hoge(1);

    // verify
    expect(func.hoge).toHaveBeenCalledWith(1);
  });
});

スパイ関数に戻り値が必要な場合(jasmine.createSpy().and.returnValue)

describe('test', () => {
  it('toHaveBeenCalledWith', () => {
    // setup
    const func = { hoge: () => 1 };
    spyOn(func, 'hoge').and.returnValue(2);

    // exercise
    const actual = func.hoge();

    // verify
    expect(actual).toBe(2);
  });
});

スパイ関数の生成の仕方

// spyOn
spy = spyOn(obj, 'hoge');

// createSpy
obj.hoge = jasmine.createSpy();

使いどころ

  • スパイ関数を使用することで、テスト対象のコードに集中してテストコードの実装ができます。
  • スパイ関数の実行や引数の確認をすることで、DIされたオブジェクトなどのメソッドが実行されたかどうか確認が出来るので便利です。