在我使用过的所有测试框架中,都有一个可选参数来指定您自己的自定义错误消息。
这可能非常有用,我找不到用茉莉花开箱即用的方法。
我有其他3位开发人员问我这个确切的功能,当谈到茉莉花时,我不知道该告诉他们什么。
是否可以在每个断言上指定自己的自定义错误消息?
答案 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'});