Руководство для начинающих по запуску модульных тестов с помощью 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;
}

Как видите, код простой.

Попался, если вы создадите новый пакет локально

Если вы хотите скопировать файл кода, а не весь репозиторий, то есть один нюанс. Вам нужно будет:

  1. Создайте пакет с: npm initИтак, зависимости вашего узла установлены в текущей папке.
  2. Переключите код на module, добавив к package.json:
{
  …
  "type": "module",
  …
}

Посмотреть, как это делается, можно в моем репо.

Установить Жасмин

Код, который мы собираемся протестировать, будет работать одинаково в браузере или на Node. Для простоты давайте протестируем его на Node. Во-первых, нам нужно установить Jasmine. Для этого следуем официальной документации:

$ npm install --save-dev jasmine #1

$ npx jasmine init #2

Команды выполняют следующие функции:

  1. Установите Jasmine как зависимость разработки
  2. Сгенерируйте базовую конфигурацию в 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.