[英]How to pass a custom error message to a jasmine matcher?
在我使用的所有測試框架中,都有一個可選參數來指定您自己的自定義錯誤消息。
這可能非常有用,而且我找不到一種用茉莉花開箱即用的方法。
我已經有 3 位其他開發人員向我詢問過這個確切的功能,而當談到 jasmine 時,我不知道該告訴他們什么。
是否可以在每個斷言上指定您自己的自定義錯誤消息?
Jasmine 已經支持所有匹配器(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
如果您查看 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);
};
如您所見,消息被硬編碼到匹配器中,並將在您調用匹配器時設置。 我可以考慮擁有您自己的消息的唯一方法是像 這里描述的那樣編寫您的匹配器
此問題是跟蹤使用.because()
機制實現自定義錯誤消息的興趣。
與此同時, avrelian創建了一個很好的庫,它使用since()
機制實現自定義錯誤消息 - jasmine-custom-message
。
是的,這是可以做到的。
您可以在全局范圍內定義自定義匹配器,覆蓋 jasmine 中的錯誤消息,如下所示:
beforeEach(function () {
jasmine.addMatchers({
toReport: function () {
return {
compare: function (actual, expected, msg) {
var result = {pass: actual == expected};
result.message = msg;
return result;
}
}
}
});
});
在expect()
之后立即expect()
withContext() 進行鏈式調用。 例子:
expect(myValue)
.withContext("This message will be printed when the expectation doesn't match")
.toEqual({foo: 'bar'});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.