カスタム同等性テスター

独自のカスタム同等性テスターを定義することで、2 つのオブジェクトが同等であるかどうかを Jasmine が判断する方法をカスタマイズできます。

カスタム同等性テスターは、2 つの引数を取る関数です。カスタム同等性テスターが 2 つの項目を比較する方法を把握している場合、 true または false を返す必要があります。それ以外の場合は、 undefined を返して、Jasmine の同等性テスターにその項目を比較できないことを伝える必要があります。

function myCustomTester(first, second) {
  if (typeof first === 'string' && typeof second === 'string') {
    return first[0] === second[1];
  }
}

次に、Jasmine が認識できるように beforeEach にテスターを登録します。

beforeEach(function() {
  jasmine.addCustomEqualityTester(myCustomTester);
});

これで、仕様で比較を行うと、カスタム同等性テスターが最初にチェックされ、その後既定の同等性テストにフォールバックします。カスタムテスターが false を返した場合、他の同等性チェックは実行されないことに注意してください。

it('is equal using a custom tester', function () {
  expect('abc').toEqual(' a ');
});

it('is not equal using a custom tester', function () {
  expect('abc').not.toEqual('abc');
});

it('works even in nested equality tests', function () {
  expect(['abc', '123'].toEqual([' a ', ' 1 ']);
});