カスタム非対称等価性チェッカー

Jasmineはjasmine.any()jasmine.objectContaining()などの複数の非対称等価性チェッカーをすぐに利用できます。必要に応じて、独自の非対称等価性チェッカーを作成して、テストロジックをカプセル化できます。

まず、オブジェクトを返す関数を1つ作成します。このオブジェクトはasymmetricMatch関数を提供する必要があります。

function multipleOf(number) {
  return {
    /*
     * The asymmetricMatch function is required, and must return a boolean.
     */
    asymmetricMatch: function(compareTo) {
      return compareTo % number === 0;
    },

    /*
     * The jasmineToString method is used in the Jasmine pretty printer. Its
     * return value will be seen by the user in the message when a test fails.
     */
    jasmineToString: function() {
      return '<multipleOf: ' + number + '>';
    }
  };
}

カスタム非対称等価性チェッカーを定義した後は、テストで使用できます。

spyOn(Buffer, 'alloc').and.callThrough();

Buffer.alloc(2048);

expect(Buffer.alloc).toHaveBeenCalledWith(multipleOf(1024));

Jasmineの組み込み非対称等価性チェッカーと同様に、配列またはオブジェクト内にネストすることもでき、正しく機能します。

spyOn(request, 'post');

request.post({ name: 'Jan Jansen', age: 40 });

expect(request.post).toHaveBeenCalledWith({ name: jasmine.any(String), age: multipleOf(10) });

Jasmineの組み込み非対称等価性チェッカーと同様に、Jasmineが等価性チェックを行う場所であればどこでも使用できます。

expect(10).toEqual(multipleOf(5));

expect({ x: 3, y: 9 }).toEqual({ x: multipleOf(3), y: multipleOf(3) });