簡體   English   中英

如何將自定義錯誤消息傳遞給茉莉花匹配器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM