7. Тесты

Функциональные тесты — проверяют, что код выполняет свою прямую задачу с точки зрения пользователей программы.

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

  • Модульные
  • Интеграционные
  • Системные

Структура папок

src/
└── capitalize.js
tests/
└── capitalize.test.js

Содержимое теста:

if (capitalize('hello') !== 'Hello') {
  throw new Error('Функция работает неверно!');
}
if (capitalize('') !== '') {
  throw new Error('Функция работает неверно!');
}
console.log('Все тесты пройдены!');

Запуск:

$ node tests/capitalize.test.js

В node.js встроен модуль assert, позволяющий строить утверждения. Он включает также специализированные утверждения.

assert(capitalize(‘hello’) === ‘Hello’);

assert.strictEqual(actual, expected)

Функция strictEqual(actual, expected) проверяет равенство по ссылке. То есть два разных объекта, имеющих одинаковое содержание, рассматриваются, как не эквивалентные. Для сравнения по значению используется ещё одно утверждение: assert.deepStrictEqual(actual, expected). Оно опирается только на содержимое.

Для тестирования негативных сценариев предназначены функции assert.notStrictEqual(actual, expected) и assert.notDeepStrictEqual(actual, expected).

Еще более дружелюбная библиотека power-assert (https://github.com/power-assert-js/power-assert)

  • assert(value, [message])
  • assert.ok(value, [message])
  • assert.equal(actual, expected, [message])
  • assert.notEqual(actual, expected, [message])
  • assert.strictEqual(actual, expected, [message])
  • assert.notStrictEqual(actual, expected, [message])
  • assert.deepEqual(actual, expected, [message])
  • assert.notDeepEqual(actual, expected, [message])
  • assert.deepStrictEqual(actual, expected, [message])
  • assert.notDeepStrictEqual(actual, expected, [message])
  • assert.fail(actual, expected, message, operator)
  • assert.throws(block, [error], [message])
  • assert.doesNotThrow(block, [message])
  • assert.ifError(value)

Тесты с помощью Jest


import reverse from '../src/index.js';
test('reverse', () => {
  expect(reverse('hello')).toEqual('olleh');
  expect(reverse('')).toEqual('');
});

Jest ожидает, что тесты находятся в директории __tests__

Матчеры стали популярны в тестовых фреймворках после появления подхода BDD (Behaviour Driven Development, разработка через поведение). Технически, такой подход стремится сделать тесты похожими на словесное описание выполняемой задачи.

Матчеры: https://jestjs.io/docs/ru/expect

хуки — специальные функции, которые запускаются до или после тестов

beforeEach(callback) принимает на вход функцию, внутри которой выполняется инициализирующее действие.

beforeAll(callback) – запускается один раз перед всеми тестами

beforeAll(() => {
  fileData = fs.readFileSync('path/to/file');
});

npx jest –coverage // возвращает % покрытия кода тестами

80% — это достаточно хорошее покрытие.

Подходы когда писать тесты

  • Тесты пишутся после кода
  • Тесты пишутся вместе с кодом
  • Тесты пишутся до кода

You may also like...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *