在用户定义的内部使用 Jasmine 预定义匹配器

Using Jasmine predefined matchers inside user defined one

我想使用 Jasmine 框架定义我自定义的、用户定义的匹配器。 我要验证两个复杂对象之间的关系。

例如:

customMatchers = {
  toBeSiblings: function(util, customEqualityTesters) {
    return {
      compare: function(actual, expected) {
        expect(actual.parent).toBeDefined()
        expect(expected.parent).toBeDefined()
        result = {
          pass: util.equals(actual.parent, expected.parent, customEqualityTesters)
        };
        if (!result.pass) {
          result.message = "Expected object: " + actual + " to be sibling of: " + expected;
        }
        return result;
      }
    };
  }
};

我想以与上述示例类似的方式使用现有的 Karma 匹配器测试比较对象的一些先决条件。

我的问题是:是否可以从使用的匹配器中提取匹配结果来格式化正确的消息,即 "Expected actual to has parent"?

我刚刚查了一下——事实证明这其实很简单。像在示例中一样使用预定义的匹配器,并简单地向这些匹配器添加自定义消息。该消息不会替换默认消息,而是附加到它。

expect(actual.parent).toBeDefined("or more precisely, expected object " + actual + " to have a parent");

如果失败,您会收到消息

Expected undefined to be defined 'or more precisely, expected object whatever to have a parent'.