Создание Специального Средства Сопоставления Для Модульного Тестирования В Jasmine 2.0

Недавно я столкнулся с необходимостью написать собственное средство сопоставления в jasmine. Первое, что я сделал, это начал гуглить и нашел пример, где все четко и ясно объяснено.

Фактический код представлен ниже:

  
   

describe('Hello world', function () { beforeEach(function() { this.addMatchers({ toBeWithinOf: function(distance, base) { this.message = function() { var lower = base - distance, upper = base + distance; return "Expected " + this.actual + " to be between " + lower + " and " + upper + " (inclusive)"; }; return Math.abs(this.actual - base) <= distance; } }); }); it('should be within in range', function () { expect(8).

toBeWithinOf(2, 6); }); });

В этом примере создается средство сопоставления, которое сообщит, является ли введенное число ( это.

фактическое ) в определенном интервале.

Обратите внимание, что при вызове сопоставителя передаются два параметра: база - число, от которого будет отсчитываться определенная величина в обе стороны - расстояние , в конечном итоге образуя интервал поиска - [база – расстояние, база + расстояние] .

В этом случае мы ожидаем, что 8 будет находиться в интервале [4, 8].

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

Кажется, все в порядке, но когда я запускаю пример в Jasmine 2.0, ничего не работает. Оказывается, синтаксис немного изменился.

Я перепробовал кучу методов и прошерстил не один форум, мне удалось решить эту проблему.

Код решения выглядит следующим образом:

describe('Hello world', function () { beforeEach(function () { jasmine.addMatchers({ toBeWithinOf: function () { return { compare: function (actual, distance, base) { var lower = base - distance, upper = base + distance, result = { pass: Math.abs(actual - base) <= distance }; if(!result.pass) { result.message = "Expected " + actual + " to be between " + lower + " and " + upper + " (inclusive)"; } return result; } } } }) }); it('should be within in range', function () { expect(8).

toBeWithinOf(2, 6); }); });

Как видите, изменен метод вызова функции добавления совпадений — ( this.addMatchers -> jasmine.addMatchers ).

Также из самой функции мы вынуждены возвращать объект, в котором должен быть объявлен метод сравнивать , который принимает все параметры, а не саму функцию сопоставления.

Обратите внимание, что первый параметр( действительный ) соответствует числу, которое мы хотим проверить, и если нам нужно передать наши параметры самому сопоставителю (как в нашем случае — базу и расстояние), то мы можем указать их там.

Внутри самой функции сравнения мы создаем объект, в который сразу записываем свойство сравнения ( проходить ).

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

Ссылку на рабочий пример можно найти здесь — скрипка .

Вот и все.

Теги: #tdd #bdd #jasmine #пользовательские сопоставления #тестирование #JavaScript #JavaScript #tdd #Тестирование веб-сервисов

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.