Given-When-Then стиль в тестировании с Jasmine
Что такое стиль Given-When-Then?
Given-When-Then (GWT) — это подход, широко используемый в поведении ориентированном тестировании (Behavior Driven Development, BDD). Он помогает сделать тесты более читаемыми и понятными. Основное преимущество GWT заключается в чёткости и структурированности, что позволяет всем членам команды, включая разработчиков, тестировщиков и бизнес-аналистов, легко понять, что именно тестируется и какие результаты ожидаются.
В контексте тестирования с использованием Jasmine, стиль Given-When-Then помогает организовать тесты таким образом, чтобы каждый тест отражал сценарий, который можно понять как описание поведения системы.
Структура GWT
Пример синтаксиса GWT:
Пример использования в Jasmine
Jasmine поддерживает поведенческое тестирование, и стиль Given-When-Then помогает сделать тесты более структурированными и понятными.
Пример 1: Проверка функции сложения
Предположим, у нас есть функция add(a, b), которая
возвращает сумму двух чисел. Мы можем написать тест в стиле GWT
следующим образом:
describe('Функция add', function() {
it('должна правильно складывать два числа', function() {
// Given
var a = 5;
var b = 3;
// When
var result = add(a, b);
// Then
expect(result).toBe(8);
});
});
Здесь:
a
и b, которым присваиваем значения 5 и 3.add(a, b),
которая выполняет действие сложения.expect(result).toBe(8).Пример 2: Тестирование функции для отрицательных чисел
describe('Функция add', function() {
it('должна правильно складывать отрицательные числа', function() {
// Given
var a = -5;
var b = -3;
// When
var result = add(a, b);
// Then
expect(result).toBe(-8);
});
});
В этом примере тестируется сложение отрицательных чисел. Структура теста остаётся той же: сначала задаём начальные условия, затем выполняем действие и, наконец, проверяем результат.
Преимущества стиля Given-When-Then
Реальные примеры с использованием GWT
Пример 3: Тестирование функции, которая проверяет, является ли число чётным
describe('Функция isEven', function() {
it('должна возвращать true для чётных чисел', function() {
// Given
var number = 4;
// When
var result = isEven(number);
// Then
expect(result).toBe(true);
});
it('должна возвращать false для нечётных чисел', function() {
// Given
var number = 5;
// When
var result = isEven(number);
// Then
expect(result).toBe(false);
});
});
Здесь используется тот же стиль GWT: мы даём начальные условия, выполняем действие и проверяем результат. В данном случае мы тестируем функцию на чётные и нечётные числа.
Пример 4: Тестирование метода, который обновляет пользовательские данные
describe('Метод updateUserData', function() {
it('должен обновлять данные пользователя', function() {
// Given
var user = { id: 1, name: 'Alex', age: 25 };
var newUserData = { name: 'Alexander', age: 26 };
// When
updateUserData(user, newUserData);
// Then
expect(user.name).toBe('Alexander');
expect(user.age).toBe(26);
});
});
Здесь в качестве примера тестируется обновление данных пользователя.
Вначале задаются начальные условия с объектом user, затем
мы вызываем метод updateUserData, который изменяет его
свойства. Ожидается, что имя и возраст пользователя будут обновлены.
Рекомендации по использованию GWT в Jasmine
Вывод
Стиль Given-When-Then помогает организовать тесты в Jasmine таким образом, чтобы они были легко воспринимаемы как для разработчиков, так и для других участников проекта. Являясь частью подхода BDD, он направлен на улучшение качества тестов, их структуры и читаемости, что способствует лучшему пониманию тестируемых функций и их поведений.