自定义相等性测试

您可以自定义 jasmine 确定两个对象是否相等的方式,方法是定义您自己的自定义相等性测试。

自定义相等性测试 是一个接受两个参数的函数。如果自定义相等性测试知道如何比较两个项目,则它应该返回 truefalse。否则,它应该返回 undefined,以告诉 jasmine 的相等性测试程序它无法比较这些项目。

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

然后,在 beforeEach 中注册您的测试程序,以便 jasmine 知道它。

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 ']);
});