Пошук уроків, статей та іншого контенту
Налаштуєте тестове середовище Node.js і порівняєте підходи до вибору між Vitest та Jest.
Тести перевіряють поведінку програми автоматично. Замість того щоб щоразу вручну перевіряти функції, ми описуємо очікуваний результат один раз і запускаємо перевірку командою.
Для Node.js популярними тестовими інструментами є:
Jest — зрілий і поширений тестовий фреймворк із великою екосистемою;
Vitest — сучасний тестовий фреймворк, орієнтований на швидкий запуск і сумісний із багатьма API Jest.
Обидва інструменти вміють:
знаходити тестові файли;
запускати окремі тести;
порівнювати фактичні та очікувані значення;
групувати тести;
показувати звіт про успішні та невдалі перевірки.
Створимо невеликий Node.js-проєкт із функціями для роботи з числами.
mkdir node-tests-demo
cd node-tests-demo
npm init -yСтворіть таку структуру:
node-tests-demo/
├── src/
│ └── calculator.js
└── test/
└── calculator.test.jsФайл src/calculator.js:
function add(first, second) {
return first + second;
}
function divide(first, second) {
if (second === 0) {
throw new Error('Ділення на нуль неможливе');
}
return first / second;
}
module.exports = {
add,
divide,
};У цьому прикладі використано CommonJS — стандартний формат модулів Node.js без додаткового налаштування package.json.
Встановіть Vitest як залежність для розробки:
npm install --save-dev vitestДодайте тестовий скрипт до package.json:
npm pkg set scripts.test="vitest run"Щоб використовувати функції describe, it і expect без імпорту в кожному файлі, створіть vitest.config.cjs:
module.exports = {
test: {
globals: true,
},
};Тепер створіть test/calculator.test.js:
const { add, divide } = require('../src/calculator');
describe('calculator', () => {
it('додає два числа', () => {
expect(add(2, 3)).toBe(5);
});
it('ділить одне число на інше', () => {
expect(divide(8, 2)).toBe(4);
});
it('повертає помилку під час ділення на нуль', () => {
expect(() => divide(8, 0)).toThrow('Ділення на нуль неможливе');
});
});Запустіть тести:
npm testVitest виконає команду vitest run і завершить роботу після одного запуску тестів.
Для інтерактивного режиму, у якому тести запускаються повторно після зміни файлів, використовуйте:
npx vitestУ прикладі використано три основні функції:
describe об’єднує тести, що стосуються однієї частини програми;
it описує окрему перевірку;
expect перевіряє фактичний результат.
Наприклад:
it('додає два числа', () => {
expect(add(2, 3)).toBe(5);
});Цей тест читається так: «очікуємо, що результат виклику add(2, 3) дорівнює 5».
Jest можна використовувати з тим самим кодом програми та майже тим самим тестом.
Спочатку видаліть Vitest:
npm uninstall vitestВидаліть файл vitest.config.cjs, оскільки він потрібен лише Vitest.
Встановіть Jest:
npm install --save-dev jestЗмініть тестовий скрипт:
npm pkg set scripts.test="jest"Файл test/calculator.test.js залишиться таким самим:
const { add, divide } = require('../src/calculator');
describe('calculator', () => {
it('додає два числа', () => {
expect(add(2, 3)).toBe(5);
});
it('ділить одне число на інше', () => {
expect(divide(8, 2)).toBe(4);
});
it('повертає помилку під час ділення на нуль', () => {
expect(() => divide(8, 0)).toThrow('Ділення на нуль неможливе');
});
});Запустіть тести:
npm testJest автоматично знайде файл calculator.test.js, виконає тести та виведе результат.
Vitest може бути зручним вибором, якщо:
потрібен швидкий запуск тестів;
проєкт уже використовує інструменти екосистеми Vite;
команда хоче синтаксис, схожий на Jest;
важливий інтерактивний режим із повторним запуском тестів;
це новий проєкт без вимоги використовувати саме Jest.
Vitest часто потребує мало налаштувань для сучасних JavaScript-проєктів.
Jest може бути кращим вибором, якщо:
проєкт уже використовує Jest;
команда має готові тести, конфігурацію або допоміжні інструменти для Jest;
важлива велика кількість навчальних матеріалів і прикладів;
у проєкті є вимоги до конкретної екосистеми Jest;
не потрібно змінювати вже стабільне тестове середовище.
Jest давно використовується в JavaScript-проєктах, тому для нього легко знайти готові рішення типових проблем.
У простих тестах синтаксис Vitest і Jest дуже схожий:
describe('calculator', () => {
it('додає числа', () => {
expect(add(2, 3)).toBe(5);
});
});Завдяки цьому перенесення базових тестів між інструментами часто не потребує змін у самих тестах.
Проте повна сумісність не означає, що всі можливості та налаштування однакові. Спеціальні конфігурації, додаткові пакети та окремі API можуть відрізнятися.
Для нового Node.js-проєкту можна діяти так:
Перевірити вимоги команди або навчального проєкту.
З’ясувати, чи використовується Jest або Vitest в інших частинах системи.
Якщо спеціальних вимог немає, обрати один інструмент і не змішувати їх без потреби.
Додати команду npm test у package.json.
Зберігати тести поруч у єдиній структурі каталогів.
Перевірити, що тести запускаються як локально, так і в середовищі автоматичної перевірки.
Для початку важливіше навчитися писати зрозумілі тести, ніж довго порівнювати фреймворки. І Vitest, і Jest добре підходять для базових тестів Node.js.
Якщо тест лежить у test/calculator.test.js, а код — у src/calculator.js, шлях має бути таким:
require('../src/calculator');Дві крапки означають перехід із каталогу test до кореня проєкту.
Команда npm test працює лише тоді, коли в package.json є скрипт test:
{
"scripts": {
"test": "vitest run"
}
}Для Jest значення буде іншим:
{
"scripts": {
"test": "jest"
}
}Конфігурація vitest.config.cjs потрібна Vitest. Jest її не використовує. Якщо ви замінюєте один інструмент іншим, перевірте, чи не залишилися старі конфігураційні файли та скрипти.
Метод toBe порівнює значення за суворою рівністю. Переконайтеся, що очікуваний тип правильний:
expect(add(2, 3)).toBe(5);Результат 5 є числом, а не рядком '5'.
Після змін у коді запускайте тести знову:
npm testТестове середовище не виправляє помилки автоматично — воно лише показує, яка очікувана поведінка порушена.
Jest і Vitest автоматизують перевірку коду Node.js.
Обидва підтримують describe, it і expect.
Для Vitest тестове середовище можна налаштувати у vitest.config.cjs.
Jest часто зручно використовувати в наявних проєктах із готовою екосистемою Jest.
Vitest може бути практичним вибором для нових проєктів і швидкого інтерактивного запуску.
Команда npm test має запускати тести незалежно від того, який фреймворк обрано.
Вибирайте один інструмент відповідно до вимог проєкту та не змішуйте Vitest і Jest без необхідності.