«Создание тестов - это не просто процесс тестирования, это одно из лучших известных средств предотвращения ошибок. Обдумывание, которое необходимо предпринять для создания полезного теста, может обнаруживать и устранять ошибки до того, как они будут закодированы - действительно, мышление при проектировании тестов может обнаруживать и устранять ошибки на всех этапах создания программного обеспечения, от концепции до спецификации, проектирования и кодирования. и все остальное ».
- Борис Бейзер

Модульное тестирование позволяет разработчику проверить модуль (класс, функцию) программного обеспечения. Разработчик может неосознанно внести изменения в существующий модуль, что может привести к сбоям в работе программного обеспечения. Модульное тестирование предотвращает такие случайные случаи. Как только разработчик напишет неправильный код для модуля, средство запуска тестов сообщит человеку, какой тестовый пример не удался.

Что касается Javascript, доступны различные фреймворки для тестирования. Несколько популярных из них:
Мокко
Чай
Жасмин

В оставшейся части статьи я сосредоточусь на нескольких основах фреймворка Jasmine.

«Jasmine - это среда разработки, управляемая поведением, для тестирования кода JavaScript. Это не зависит от каких-либо других фреймворков JavaScript. Для этого не требуется DOM (объектная модель документа). И у него чистый, очевидный синтаксис, так что вы можете легко писать тесты ». - Официальная документация Jasmine

Начать работу с Jasmine довольно просто, следуя инструкциям, приведенным ниже:

Installation:
npm install --save-dev jasmine
Initialise Project:
jasmine init
Seed Project with Examples:
jasmine examples
Run Test Suite:
jasmine

Пример тестового случая из официального документа выглядит так:

describe(“A suite is just a function”, function() {
  var a;
  it(“and so is a spec”, function() {
    a = true;
    expect(a).toBe(true);
  });
});

Я хотел бы подробнее изучить этот пример кода.

Тестовый пример обычно состоит из:
Suite
Spec
Matcher
Custom Matcher
beforeEach
afterEach

Люкс:

Набор тестов - это набор тестовых примеров. У набора тестов действительно есть название (упомянуто в кавычках). Приведенный ниже фрагмент представляет собой типичный набор тестов Jasmine с 0 тестовыми случаями.

describe(“This is a jasmine test suite”, function() {
});

Спецификация:

Тестовая спецификация - это тестовая спецификация для устройства. В Jasmine спецификация начинается с ключевого слова «it» и содержит сообщение спецификации. Приведенный ниже фрагмент представляет собой типичную спецификацию теста жасмина, которая ничего не делает.

it(“This is a jasmine test spec”, function() {
});

Соответствие:

Сопоставление - это проверка, которая позволяет вам сравнивать выходные данные модуля с результатом теста. Приведенный ниже фрагмент является типичным сопоставлением жасмина.

expect(func()).toBe(0);

Скажем, есть функция с именем func, которая всегда возвращает значение 0. Эта функция является единицей измерения. Если с этой функцией что-то пойдет не так, сопоставление не удастся и, следовательно, модульный тест для модуля не удастся.

Настраиваемые сопоставления, beforeEach, afterEach:

Jasmine предоставляет ряд встроенных сопоставителей. Однако мы можем написать свои собственные сопоставители.

beforeEach позволяет разработчику что-то определить до выполнения спецификации.

Примером может служить определение настраиваемого сопоставления в beforeEach и использование настраиваемого сопоставления в спецификации. Ниже приведен образец фрагмента:

beforeEach(function () {
  this.addMatchers({
    toBeEven: function () {
      return (this.actual % 2) === 0;
    }
  });
});
it(‘should be even’, function () {
  expect(isEvenNumber()).toBeEven();
});

afterEach позволяет разработчику определять что-либо после выполнения спецификации.

Как запускать тесты:
Jasmine предоставляет средство запуска спецификаций, в котором вы можете запускать свои тесты. Другой вариант - использовать тестовый раннер, такой как карма.

Поскольку терминал всегда красивее, браузер без головы (например, PhantomJS) должен быть предпочтительнее Chrome.