Учебное пособие по Jasmine Framework: модульное тестирование на примере

⚡ Умное резюме

Жасмин — это человек, чье поведение имеет решающее значение. JavaФреймворк для тестирования скриптов, который запускает модульные тесты Node.js без браузера или DOM, используя блоки describe, которые определяют спецификации и ожидают соответствия для проверки того, что каждая экспортируемая функция ведет себя в соответствии с документацией.

  • 🔘 Роль в рамках проекта: Жасмин проверяет любые JavaСкрипт, не требующий использования браузеров, DOM или вспомогательных библиотек.
  • ☑️ Настройка среды: Установите модуль, запустите команду `jasmine init`, затем проверьте файл `spec/support/jasmine.json`.
  • ✅ Спецификация: Функция describe задает имя набора тестов, определяет спецификацию, а функция expect проверяет результат.
  • 🧪 Соответствующие элементы: Утверждения toBe, toEqual, toContain, toThrow и toHaveBeenCalled охватывают большинство из них.
  • 🇧🇷 Современный бегун: Поддерживаемый пакет jasmine заменяет неподдерживаемый модуль jasmine-node.
  • 📊 Выбор фреймворка: Жасмин занимается распространением утверждений и шпионажем, а Джест добавляет параллельные процессы и снимки состояния.

Учебное пособие по фреймворку Jasmine для модульного тестирования приложений Node.js.

Что такое JasmineJS?

Jasmine — самый популярный и открытый продукт. JavaСкриптовая библиотека тестирования фреймворка для тестирования любого типа JavaПрименение скрипта. Jasmine следует процедуре Behavior Driven Development (BDD), чтобы гарантировать, что каждая строка JavaОператор скрипта надлежащим образом протестирован.

Для чего используется Jasmine Framework?

Тестирование — ключевой элемент любого приложения. Для модульного тестирования Node.js доступен фреймворк Jasmine. В начале 2000-х годов существовал фреймворк для тестирования. JavaСценарий приложения под названием JsUnit. Later эта структура была обновлена ​​и теперь известна как Jasmine.

Жасмин помогает в автоматизированном Модульное тестированиечто стало довольно важной практикой при разработкеping и развертывание современных веб-приложений.

В этом руководстве по Jasmine вы узнаете, как настроить среду с помощью Jasmine и как запускать тесты Jasmine для вашего первого приложения Node.js.

Жасмин для тестирования приложений Node.js.

Жасмин - это Разработка, основанная на поведении (BDD) платформа тестирования для JavaСценарий. Он делает не полагаться на браузеры, DOM или любые другие JavaСкриптовый фреймворк. Поэтому он подходит для веб-сайтов. Node.js проекты или любое другое место, где JavaСкрипт может работать. Чтобы начать использовать Jasmine, вам нужно сначала загрузить и установить необходимые модули Jasmine.

Как настроить тестовую среду Jasmine

Далее в этом руководстве по Jasmine для Node.js вам потребуется инициализировать вашу среду и изучить конфигурационный файл Jasmine. Ниже описаны шаги по настройке Jasmine в вашей среде.

Шаг 1) Установите модули NPM
Вам нужно Установить NPM Модуль jasmine позволяет использовать фреймворк Jasmine в приложении Node.js. Для установки модуля jasmine-node выполните следующую команду.

npm install jasmine-node

Примечание к версии (2026): Приведённая выше историческая команда по-прежнему работает, но... узел жасмина Модуль находится в режиме поддержки и включает Jasmine 1.3, поэтому используйте его только для устаревших проектов. Новая работа над Node.js предусматривает установку поддерживаемой версии. Jasmine CLI в качестве зависимости для разработки и вызывается через npx:

npm install --save-dev jasmine
npx jasmine init

Жасмин 6.x Это текущая основная ветка разработки, поддерживающая Node.js 20, 22 и 24, при этом Node.js 24 является активным LTS-релизом, запланированным на 2026 год.

Шаг 2) Инициализируйте среду Jasmine
Инициализация проекта — при этом Jasmine создает для вас каталог spec и файл конфигурации в формате JSON. Каталог spec используется для хранения всех ваших тестовых файлов. Благодаря этому Jasmine будет знать, где находятся все ваши тесты, и сможет выполнять их соответствующим образом. JSON Этот файл используется для хранения конкретной конфигурационной информации Jasmine.

Для инициализации среды Jasmine выполните следующую команду.

jasmine init

Шаг 3) Проверьте файл конфигурации.
Файл конфигурации будет храниться в папке spec/support как jasmine.json. В этом файле перечислены исходные файлы и файлы спецификаций, которые вы хотели бы включить в программу Jasmine.

На скриншоте ниже представлен типичный пример файла jasmine.json для Jasmine.

Конфигурационный файл Jasmine в папке spec support, содержащий каталог spec и раздел spec_files.

  1. Обратите внимание, что здесь указан каталог спецификации. Как отмечалось ранее, при запуске jasmine он ищет все тесты в этом каталоге.
  2. Следующее, на что следует обратить внимание, это параметр spec_files. Он означает, что какие бы тестовые файлы ни создавались, к ним следует добавлять ключевое слово «spec».

Примечание о конфигурации: В Jasmine 6.x тот же файл также принимает помощникикоторые загружаются один раз перед каждой спецификацией, и окр Блок, содержащий такие параметры, как random и stopSpecOnExpectationFailure. Шаблон spec_files по умолчанию — это **/*[sS]spec.?(m)jsи другой файл можно передать с помощью –Config или JASMINE_CONFIG_PATH Переменная.

Далее в этом руководстве по платформе Jasmine мы узнаем, как использовать Jasmine для тестирования приложений Node.js.

Как использовать Jasmine для тестирования приложений Node.js

Чтобы использовать модульное тестирование Jasmine для приложений Node.js, необходимо выполнить ряд шагов.

В приведенном ниже примере мы определим модуль, который складывает два числа, и эти модули необходимо протестировать. Затем мы создадим отдельный файл с тестовым кодом и используем Jasmine для тестирования функции сложения.

Шаг 1) Определите код, который необходимо протестировать. Мы собираемся определить функцию, которая будет складывать 2 числа и возвращать результат. Этот код будет записан в файле с именем «Add.js».

На скриншоте ниже показан готовый модуль Add.js, а тот же код повторен в виде текста под ним.

Модуль Add.js экспортирует функцию AddNumber, которая возвращает сумму двух параметров.

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code объяснение

  1. Ключевое слово «exports» используется для обеспечения фактического доступа к функциям, определенным в этом файле, из других файлов.
  2. Затем мы определяем функцию под названием «AddNumber». Эта функция определена так, чтобы принимать два параметра: a и b. Функция добавляется в модуль «экспорт», чтобы сделать ее общедоступной функцией, к которой могут получить доступ другие модули приложения.
  3. Наконец, мы заставляем нашу функцию возвращать добавленное значение параметров.

Шаг 2) Далее нам нужно определить код для тестирования в Jasmine, который будет использоваться для проверки функции «Add» в файле Add.js. Приведенный ниже код необходимо поместить в файл с именем добавить-spec.js.

ВниманиеСлово 'spec' необходимо добавить в тестовый файл, чтобы Jasmine мог его обнаружить.

На скриншоте ниже показан тот же файл спецификации, открытый в редакторе.

Файл add-spec.js содержит набор тестов describe и спецификацию IT, проверяющую, что AddNumber возвращает 11.

var app=require("../Add.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});

Code объяснение

  1. Сначала нам нужно подключить наш файл Add.js, чтобы мы могли протестировать функцию AddNumber в этом файле.
  2. Сейчас мы создаем наш тестовый модуль. Первая часть тестового модуля предназначена для описания метода, который, по сути, дает название нашему тесту. В данном случае название нашего теста — «Сложение».
  3. Следующий шаг — дать описание нашего теста, используя метод «it».
  4. Теперь мы вызываем наш метод AddNumber и передаем два параметра: 5 и 6. Они будут переданы в наш метод AddNumber в файле Add.js. Возвращаемое значение затем сохраняется в переменной с именем value.
  5. Последний шаг — это сравнение или собственно проверка. Поскольку мы ожидаем, что функция AddNumber вернет значение 11, мы определяем это значение с помощью метода expect(value).toBe(ожидаемое значение).

Результат

  1. Чтобы запустить тест, нужно запустить команду jasmine.
  2. На скриншоте ниже показано, что после выполнения команды Jasmine система обнаружит тест с именем add-spec.js и выполнит его соответствующим образом. Если в тесте обнаружатся ошибки, они будут отображены.

Вывод в консоль команды Jasmine, сообщающий о выполненном тесте add-spec.

В примере с добавлением используется один сопоставитель, хотя Jasmine поставляется с полным набором сопоставителей. В таблице ниже перечислены те, которые охватывают почти все утверждения, которые вы будете писать.

Подборка подходящих вариантов для Jasmine, которую вы будете использовать чаще всего.

Сопоставитель — это сравнение, следующее за expect(). Добавьте .not перед любым сопоставителем, чтобы инвертировать его, например, expect(value).not.toBe(11).

Матчер Что он проверяет Типичное использование
быть Строгое тождество, то же сравнение, что и === expect(value).toBe(11)
в равной Глубокое равенство объектов и массивов expect(user).toEqual({id: 1})
содержать Принадлежность к элементу массива или строки expect(files).toContain('add-spec.js')
toBeDefined Значение не является неопределенным. expect(app.AddNumber).toBeDefined()
бросить Обернутая функция вызывает ошибку. expect(callAdd).toThrow()
быть призванным Как минимум один раз был задействован шпион. expect(logger.write).toHaveBeenCalled()

Две привычки помогают сделать ошибки читаемыми. Используйте toBe только для примитивных типов и идентичных ссылок, поскольку два объекта с одинаковым содержимым никогда не будут иметь оператор ===. Используйте toEqual для структур и добавляйте toHaveBeenCalledWith, когда аргументы так же важны, как и сам вызов.

Подготовка, завершение и шпионаж в Jasmine

Для полноценных рабочих мест необходимы общие ресурсы и дублирующие файлы для тех, кто работает медленно. Jasmine предоставляет и то, и другое без дополнительных пакетов.

  • до каждого и после каждого Этот код выполняется до и после каждого параметра внутри блока describe, что является естественным местом для перестройки элементов интерфейса.
  • до всего и после всего Они запускаются один раз для всего блока, поэтому их следует приберечь для ресурсоемких задач, таких как открытие соединения.
  • spyOn(object, 'method') заменяет реальный метод на tracking double; добавьте .and.returnValue(), чтобы контролировать ответ.
  • jasmine.createSpy('name') Создает автономный объект типа double для функции обратного вызова, к которой нет объекта для прикрепления.
  • Асинхронные спецификации Может быть объявлен как асинхронный и ожидать выполнения, может возвращать промис или принимать коллбэк done, который должен быть вызван ровно один раз.

Шпионы сбрасываются между проверками, поэтому набор тестов никогда не передает заглушенный метод в следующий тест. Именно эта изоляция позволяет неудачной проверке указывать на один дефект, а не на цепочку дефектов, что соответствует принципу, описанному в модульное тестирование основы.

Жасмин против Мокко против Шутки

Jasmine — один из трёх доминирующих фреймворков. JavaТестирование скриптов, и выбор обычно сводится к тому, сколько проводов вы хотите иметь в своем распоряжении.

Аспект жасмин Кофе мокко Шутка
Утверждения Встроенная Добавлено, обычно Чай Встроенная
Шпионы и насмешки Встроенная Добавлено, обычно Синон Встроенная
Типы Последовательный Последовательный Параллельный режим работы процессов
Снимки Нет Нет Да
Общий дом Angular, простой Node.js Гибкие стеки Node.js React и современные сборщики

Отбор Кофе мокко когда вы хотите собрать собственный стек утверждений и имитаций, и Шутка Когда параллельные запуски, покрытие кода и снимки состояния важнее, чем управление конфигурацией. Jasmine остается самым легким и при этом полностью готовым вариантом, поэтому он по-прежнему широко распространен. автоматизация тестирования люкс.

Часто задаваемые вопросы (FAQ)

Jasmine считывает spec_dir как префикс, затем все шаблоны, перечисленные в spec_files, поэтому выполняются только соответствующие файлы. Пути, начинающиеся с восклицательного знака, исключаются, а вспомогательные функции загружаются один раз перед спецификациями для регистрации общей настройки.

Объявите спецификацию асинхронной и дождитесь вызова, верните промис или примите коллбэк "done". руководство по асинхронным операциям Предупреждает, что команда `done` должна сработать ровно один раз, иначе ошибки приведут к неправильной спецификации.

Передайте путь или шаблон после запуска, например, npx jasmine spec/appSpec.js. Флаг –filter принимает шаблон, совпадающий с именем, указанным в describe, что обеспечивает быструю обратную связь при работе с одним набором тестов.

узел жасмина Пакет находится в режиме поддержки, по-прежнему включает Jasmine 1.3 и указывает Node.js 10 и 12 как актуальные версии. Официальный пакет Jasmine. tracВместо этого используйте фреймворк и поддерживаемые версии Node.js.

Если добавить префикс x к спецификации, например, xit или xdescribe, Jasmine сообщит, что она находится в состоянии ожидания. Если добавить префикс f, например, fit или fdescribe, будут выполнены только выбранные спецификации. Перед подтверждением удалите оба префикса.

Искусственный интеллект за считанные секунды создает блоки описания, сопоставители и граничные случаи на основе существующего модуля, а также помечает наборы тестов, которые периодически дают сбой. Каждый сгенерированный тест все равно требует проверки, поскольку уверенное утверждение о неправильном поведении скрывает дефект.

Второй пилот GitHub Программа автоматически дополняет тела спецификаций по мере ввода текста, а в режиме агента может создавать запросы на слияние, исправляющие неработающие спецификации после рефакторинга. Рассматривайте изменения как предложение и запускайте набор тестов самостоятельно.

Angular по-прежнему служит основой для спецификаций Jasmine, и Protracтор До закрытия Jasmine использовался в качестве фреймворка по умолчанию. Теперь команды используют Jasmine в паре с Karma для браузеров или переносят потоки обработки браузеров в другие платформы. Cypress и драматург.

Подведем итог этой публикации следующим образом: