📜  JasmineJS-匹配器(1)

📅  最后修改于: 2023-12-03 15:31:27.985000             🧑  作者: Mango

JasmineJS-匹配器

JasmineJS是一个流行的JavaScript测试框架,其中的匹配器是其非常重要的一部分。匹配器通过比较实际结果与期望结果之间的差异来判断测试是否成功。在本文中,我们将深入了解JasmineJS的匹配器,以及如何正确地使用它们。

常用的匹配器

以下是一些常见的匹配器:

toEqual

toEqual匹配器用于判断两个对象是否相等,并且会递归比较每个属性和子属性。

expect(x).toEqual(y);
toBe

toBe匹配器用于判断两个对象是否完全相同。如果它们在内存中的指针不同,则测试将失败。

expect(x).toBe(y);
toBeNull

toBeNull匹配器用于判断值是否为null

expect(x).toBeNull();
toBeTruthy / toBeFalsy

toBeTruthy匹配器用于判断值是否为真。toBeFalsy匹配器则是判断值是否为假。

expect(x).toBeTruthy();
expect(y).toBeFalsy();
toContain

toContain匹配器用于判断一个对象是否包含指定的值。

expect(array).toContain(value);
expect(string).toContain(substring);
toBeLessThan / toBeGreaterThan

toBeLessThan匹配器用于判断一个值是否小于给定值。toBeGreaterThan则是用于判断一个值是否大于给定值。

expect(x).toBeLessThan(y);
expect(y).toBeGreaterThan(x);
自定义匹配器

如果您需要编写更特定的测试用例,以及内置的JasmineJS匹配器无法满足您的需求,那么您可以轻松地编写自己的匹配器。自定义匹配器是一种功能强大的技术,它让您可以对您的应用程序进行更全面的测试。

编写自定义匹配器

首先,您需要定义一个函数,它将包含您的匹配逻辑。这个函数需要返回一个对象,该对象必须包含两个函数:一个compare函数和一个negativeCompare函数。

  • compare函数应该执行主要的匹配逻辑,并返回一个truefalse值。
  • negativeCompare函数应该执行相反的匹配逻辑,并返回一个truefalse值。也就是说,如果compare函数返回true,则negativeCompare函数应该返回false
function toBeAwesome() {
  return {
    compare: function(actual, expected) {
      var result = {
        pass: actual === expected,
        message: actual + ' is not awesome'
      };
      return result;
    },
    negativeCompare: function(actual, expected) {
      var result = {
        pass: actual !== expected,
        message: actual + ' is awesome'
      };
      return result;
    }
  };
}
注册自定义匹配器

完成自定义匹配器后,您需要将其注册到JasmineJS中。这可以通过调用jasmine.addMatchers函数来完成。将自定义匹配器传递给该函数,如下所示:

jasmine.addMatchers({
  toBeAwesome: function() {
    return {
      compare: function(actual, expected) {
        var result = {
          pass: actual === expected,
          message: actual + ' is not awesome'
        };
        return result;
      },
      negativeCompare: function(actual, expected) {
        var result = {
          pass: actual !== expected,
          message: actual + ' is awesome'
        };
        return result;
      }
    };
  }
});
使用自定义匹配器

现在您可以在测试代码中使用您的自定义匹配器了。例如:

describe('MyCustomMatcher', function() {
  beforeEach(function() {
    jasmine.addMatchers({
      toBeAwesome: function() {
        return {
          compare: function(actual, expected) {
            var result = {
              pass: actual === expected,
              message: actual + ' is not awesome'
            };
            return result;
          },
          negativeCompare: function(actual, expected) {
            var result = {
              pass: actual !== expected,
              message: actual + ' is awesome'
            };
            return result;
          }
        };
      }
    });
  });

  it('should be awesome', function() {
    expect('JasmineJS').toBeAwesome('JasmineJS');
  });

  it('should not be awesome', function() {
    expect('JavaScript').not.toBeAwesome('JasmineJS');
  });
});

以上是JasmineJS匹配器的介绍,通过匹配器,您可以更轻松地编写测试用例,并提高代码的质量和稳定性。