Руководство для начинающих по запуску модульных тестов с помощью Jasmine.
В своей предыдущей статье я показал примеры псевдокода модульного тестирования чистых функций. В ответ на эту статью я получил отличный вопрос — так как же мне тогда начать тестировать свой код? Давайте более практично посмотрим на тот же простой случай для тестирования.
Получить кодовую базу
Я подготовил репозиторий с кодом примера. Основное содержание pure-functions.js
:
export function greet(name, surname) {
return `Hello ${name} ${surname}!`;
}
export function calculateDiscountedPrice(originalPrice, discount) {
return originalPrice - originalPrice * discount;
}
export function power(base, exponent) {
return base ** exponent;
}
Как видите, код простой.
Попался, если вы создадите новый пакет локально
Если вы хотите скопировать файл кода, а не весь репозиторий, то есть один нюанс. Вам нужно будет:
- Создайте пакет с:
npm init
Итак, зависимости вашего узла установлены в текущей папке. - Переключите код на module, добавив к
package.json
:
{
…
"type": "module",
…
}
Посмотреть, как это делается, можно в моем репо.
Установить Жасмин
Код, который мы собираемся протестировать, будет работать одинаково в браузере или на Node. Для простоты давайте протестируем его на Node. Во-первых, нам нужно установить Jasmine. Для этого следуем официальной документации:
$ npm install --save-dev jasmine #1
$ npx jasmine init #2
Команды выполняют следующие функции:
- Установите Jasmine как зависимость разработки
- Сгенерируйте базовую конфигурацию в
spec/support/jasmine.json
:
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.?(m)js"
],
"helpers": [
"helpers/**/*.?(m)js"
],
"env": {
"stopSpecOnExpectationFailure": false,
"random": true
}
}
Наконец, давайте обновим package.json
, чтобы настроить команду тестирования:
{
…
"scripts": {
"test": "jasmine"
},
…
}
Выполнение (нет) тестов
К этому моменту вы должны были выполнить всю необходимую настройку и ни одного теста на месте. Давайте посмотрим, работает ли он так, как ожидалось:
$ npm test
> [email protected] test
> jasmine
Randomized with seed 10285
Started
No specs found
Finished in 0.002 seconds
Incomplete: No specs found
Randomized with seed 10285 (jasmine --random=true --seed=10285)
Пример теста
Добавим простой тест. Мы создадим новый файл ./spec/pure-functions.spec.js
, соответствующий соглашению Jasmine:
- он находится внутри папки
./spec
, следующей за тем, что установлено в этой строке сгенерированной конфигурации:"spec_dir": "spec",
- он заканчивается на
spec.js
— еще один шаблон именования, установленный в"spec_files": ["**/*[sS]pec.?(m)js"
Код, который находится внутри ./spec/pure-functions.spec.js
:
import { greet } from "../pure-functions.js";
describe("greet", () => {
it("should greet by name & surname", () => {
expect(greet("Lorem", "Ipsum")).toEqual("Hello Lorem Ipsum!");
});
});
Код:
import { greet } from "../pure-functions.js";
— получает функцию из нашего исходного кода. Эта строка не будет работать должным образом без"type": "module",
вpackage.json
.describe("", <callback>)
— оборачивает связанные тесты для улучшения сообщений об ошибках.it("", <callback>)
-индивидуальный тест,expect(<value>).<matcher>(<arguments>);
-это то, как мы устанавливаем ожидания в Жасмин. Вы можете найти сопоставители в документации.
Бегать!
Этот тест работает:
$ npm run test
> [email protected] test
> jasmine
Randomized with seed 09863
Started
.
1 spec, 0 failures
Finished in 0.004 seconds
Randomized with seed 09863 (jasmine --random=true --seed=09863)
Окончательный код
Вы можете найти мой окончательный код здесь.
Домашнее задание
Вот домашнее задание: получить код и продолжить переделывать тесты из первой статьи. Вы можете поделиться результатами или проблемами в комментариях!
Первоначально опубликовано на https://how-to.dev.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.