テスト自動化

Sinonを用いてメソッドの引数を検証する方法

Sinonとは?

Sinon.jsは、JavaScriptのテストにおいて スタブ、スパイ、モック を提供するライブラリです。

関数の呼び出しを監視したり、ダミーの外部依存処理を作成するために使用されます。

以下の用途でよく使われます。

  1. スパイ(Spy)
    • 関数が呼ばれたかどうか、どの引数で呼ばれたかを検証できる。
    • 例: sinon.spy(object, "method")
  2. スタブ(Stub)
    • 依存する関数を置き換えて、任意の値を返すようにできる。
    • 例: sinon.stub(object, "method").returns("mocked value")
  3. モック(Mock)
    • 関数の期待される動作を定義し、テスト後に検証できる。
    • 例: sinon.mock(object).expects("method").once().withArgs("arg")

Sinonは、MochaやJestなどのテストフレームワークと組み合わせて使用され、特に非同期処理やAPIの呼び出しを模擬するのに便利です。

Sinonを用いてメソッドの引数を検証する方法

メソッドに対してどのような引数が渡されたかを確認するための手順は下記です。

  1. sinon.spy()で対象のメソッドを監視する
  2. calledWith(期待される引数)で正しい引数が渡されたかを確認する
import sinon from 'sinon';
import { expect } from 'chai';
import { describe, it } from 'mocha';

// テスト対象のクラス
class Calculator {
  add(a, b) {
    return a + b;
  }
}

// Mocha & Sinon のテスト
describe('Calculator', () => {
  it('add メソッドが正しい引数で呼ばれる', () => {
    const calculator = new Calculator();
    const spy = sinon.spy(calculator, 'add');

    // メソッドを実行
    calculator.add(2, 3);

    // 呼び出し回数を確認
    expect(spy.calledOnce).to.be.true;

    // 指定した引数が渡されたかを確認
    expect(spy.calledWith(2, 3)).to.be.true;

    // スパイをリストア
    spy.restore();
  });
});