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

Разработка через тестирование (TDD) и разработка через поведение (BDD)

Когда дело доходит до написания тестов, существует два основных направления мысли: разработка, управляемая поведением (BDD), и разработка, управляемая тестированием (TDD). При реализации TDD автоматизированные тестовые примеры создаются в начале проекта и тестируются на соответствие доступным функциям кода (поскольку это написано до того, как что-либо будет построено, никаких функций не написано). Неизбежно, поскольку нет кода для тестирования, тесты не пройдут. Затем пишется код, удовлетворяющий требованиям теста, сравнивается со встроенными тестами до тех пор, пока они не пройдут, и после этого проводится рефакторинг для оптимизации.

Тестирование в стиле BDD учитывает поведение конечных пользователей перед написанием любого кода или тестов - это означает, что конечный продукт уже создан до того, как будет написан какой-либо тестовый код. Обычно это пишется на простом английском языке (подумайте о пользовательских историях) и его легче понять более крупным командам, в состав которых входят не только разработчики. Затем этот простой английский преобразуется в сценарии, которые запускаются с кодом. Отсюда процесс во многом такой же, как и в TDD, в том смысле, что изначально код не работает, потому что код не был написан. Затем код пишется, тестируется и проверяется на соответствие написанным сценариям до тех пор, пока он не будет принят.

На базовом уровне BDD определяет поведение приложения по отношению к конечному пользователю, а TDD фокусируется на выполнении функций.

Что такое Чай?

Chai - это библиотека утверждений (инструмент для проверки правильности вещей), которую можно использовать с любой фреймворком для тестирования Javascript. Chai предоставляет синтаксис / стиль как для TDD, так и для BDD, с которым довольно просто начать работу.

BDD с синтаксисом библиотеки утверждений Chai (ожидаем и должен)

Тестирование в стиле BDD в Chai объединяет понятный английский язык для написания тестов, которые чрезвычайно легко освоить и понять. Они бывают двух форм: ожидать и следует.

//EXPECT STYLING/SYNTAX
let expect = require(‘chai’).expect,
    foo = ‘bar’,
    beverages = { tea: [ ‘chai’, ‘matcha’, ‘oolong’ ] };
expect(foo).to.be.a(‘string’);
expect(foo).to.equal(‘bar’);
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property(‘tea’).with.lengthOf(3);
//SHOULD STYLING/SYNTAX
let should = require(‘chai’).should() //actually call the function,
    foo = ‘bar’,
    beverages = { tea: [ ‘chai’, ‘matcha’, ‘oolong’ ] };
foo.should.be.a(‘string’);
foo.should.equal(‘bar’);
foo.should.have.lengthOf(3);
beverages.should.have.property(‘tea’).with.lengthOf(3);

Как видите, стили ожидать и следует очень удобочитаемы и четко отражают ожидания каждого теста. Благодаря этим знаниям становится легче поддерживать написание кратких, удобочитаемых и понятных тестов. Ознакомьтесь с документацией по написанию дополнительных тестов стиля BDD здесь.

Стиль библиотеки Chai assert

// ASSERT STYLING/SYNTAX
let assert = require(‘chai’).assert,
   foo = ‘bar’,
   beverages = { tea: [ ‘chai’, ‘matcha’, ‘oolong’ ] };
assert.typeOf(foo, ‘string’); // without optional message
assert.typeOf(foo, ‘string’, ‘foo is a string’); // with optional message
assert.equal(foo, ‘bar’, ‘foo equal `bar`’); assert.lengthOf(foo, 3, ‘foo`s value has a length of 3’);
assert.lengthOf(beverages.tea, 3, ‘beverages has 3 types of tea’);

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