如何将自定义错误消息传递给jasmine matcher?

时间:2013-03-04 19:37:07

标签: javascript unit-testing jasmine

在我使用过的所有测试框架中,都有一个可选参数来指定您自己的自定义错误消息。

这可能非常有用,我找不到用茉莉花开箱即用的方法。

我有其他3位开发人员问我这个确切的功能,当谈到茉莉花时,我不知道该告诉他们什么。

是否可以在每个断言上指定自己的自定义错误消息?

5 个答案:

答案 0 :(得分:11)

为所有匹配器添加了可选参数(toBe,toContain和其他),因此您可以使用:

expect(true).toBe(false, 'True should be false').

然后在输出中它将如下所示:

Message:
    Expected true to be false, 'True should be false'.

提交链接(文档中未对此进行描述): https://github.com/ronanamsterdam/DefinitelyTyped/commit/ff104ed7cc13a3eb2e89f46242c4dbdbbe66665e

答案 1 :(得分:9)

如果您查看jasmine源代码,您将看到无法从匹配器外部设置消息。例如toBeNaN匹配器。

/**
 * Matcher that compares the actual to NaN.
 */
jasmine.Matchers.prototype.toBeNaN = function() {
  this.message = function() {
      return [ "Expected " + jasmine.pp(this.actual) + " to be NaN." ];
  };

  return (this.actual !== this.actual);
};

正如您所看到的,消息被硬编码到匹配器中,并在您调用匹配器时进行设置。我可以想到拥有自己的消息的唯一方法是编写像here

所述的匹配器

答案 2 :(得分:5)

This issue正在跟踪使用.because()机制实现自定义错误消息的兴趣。

与此同时,avrelian创建了一个很好的库,使用since()机制实现自定义错误消息 - jasmine-custom-message

答案 3 :(得分:1)

您可以在全局范围内定义自定义匹配器,覆盖茉莉花中的错误消息,如下所示:

from altair import *
Chart('http://vega.github.io/vega-lite/data/population.json',
    description='A bar chart showing the US population distribution of age groups in 2000.',
).mark_bar().encode(
    x=X('sum(people):Q',
        axis=Axis(
            title='population',
        ),
    ),
    y=Y('age:O',
        scale=Scale(
            bandSize=17.0,
        ),
    ),
).transform_data(
    filter='datum.year == 2000',
)

答案 4 :(得分:0)

expect()之后立即进行链式呼叫withContext()。示例:

expect(myValue)
  .withContext("This message will be printed when the expectation doesn't match")
  .toEqual({foo: 'bar'});