Подтвердить что ты не робот

Как передать настраиваемое сообщение об ошибке в jasmine matcher?

Во всех средах тестирования, которые я использовал, есть необязательный параметр, чтобы указать собственное пользовательское сообщение об ошибке.

Это может быть очень полезно, и я не могу найти способ сделать это из коробки с жасмином.

У меня было 3 других разработчика, которые спрашивают меня об этой точной функциональности, и когда дело доходит до жасмина, я не знаю, что им сказать.

Можно ли указать собственное сообщение об ошибке для каждого утверждения?

4b9b3361

Ответ 1

Если вы посмотрите на исходный код жасмина, вы увидите, что невозможно установить сообщение извне. Например, 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);
};

Как вы можете видеть, сообщения жестко закодированы в матчи и будут установлены, когда вы вызываете соединитель. Единственный способ, с помощью которого я могу придумать свои собственные сообщения, - написать свой матчи, как описано здесь

Ответ 2

Добавлен необязательный параметр для всех совпадений (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

Ответ 3

Эта проблема отслеживает интерес к реализации пользовательских сообщений об ошибках с использованием механизма .because().

Тем временем avrelian создал красивую библиотеку, которая реализует собственные сообщения об ошибках с использованием механизма since() - jasmine-custom-message.

Ответ 4

Вы можете определить пользовательский соединитель в глобальной области действия, переопределив сообщение об ошибке в жасмине, как показано ниже:

beforeEach(function () {
    jasmine.addMatchers({
        toReport: function () {
            return {
                compare: function (actual, expected, msg) {
                    var result = {pass: actual == expected};
                    result.message = msg;
                    return result;
                }
            }
        }
    });
});