javascript42
Главная
Все учебники
Блог
Учебник Jasmine
Введение в Jasmine
Что такое Jasmine
История и философия фреймворка
Сравнение с другими testing frameworks
Установка и настройка окружения
Первый тест на Jasmine
Структура тестового файла
Основы тестирования
Концепция behavior-driven development
Анатомия теста в Jasmine
Функция describe
Функция it
Функция expect
Организация тестовых наборов
Читаемость и maintainability тестов
Matchers
Встроенные matchers
Equality matchers
Truthiness matchers
Numerical matchers
String matchers
Array и iterable matchers
Object matchers
Exception matchers
Создание custom matchers
Asymmetric equality matchers
Цепочки матчеров с not
Setup и Teardown
Функции beforeEach и afterEach
Функции beforeAll и afterAll
Порядок выполнения хуков
Scope и контекст в хуках
Async setup и teardown
Использование this в тестах
Очистка состояния между тестами
Spies
Концепция и назначение spies
Создание spy с помощью spyOn
Отслеживание вызовов функций
Spy matchers
Возвращаемые значения через and.returnValue
Вызов оригинальной функции через and.callThrough
Замена реализации через and.callFake
Создание standalone spies с createSpy
Создание spy объектов с createSpyObj
Spy properties
Получение информации о вызовах
Асинхронное тестирование
Callback-based асинхронность
Использование параметра done
Timeout настройки для асинхронных тестов
Тестирование Promise
Возврат Promise из тестов
Async/await в тестах
Тестирование rejected promises
Комбинирование async/await и done
Clock manipulation для асинхронного кода
Jasmine Clock
Концепция mock clock
Установка и удаление clock
Управление временем с tick
Тестирование setTimeout и setInterval
Тестирование Date.now
Mockdate функциональность
Tick с конкретным временем
Фильтрация и фокусировка тестов
Запуск отдельных тестов с fit
Запуск отдельных наборов с fdescribe
Исключение тестов с xit
Исключение наборов с xdescribe
Pending спецификации
Работа с большими test suites
Стратегии отладки через фокусировку
Конфигурация Jasmine
Файл jasmine.json
Настройка spec_dir и spec_files
Настройка helpers
Random выполнение тестов
Seed для воспроизводимости
Stoppage стратегии
Timeout конфигурация
Reporter настройки
Работа с DOM
Fixture стратегии
Создание и очистка DOM элементов
Тестирование event handlers
Использование innerHTML vs createElement
DOM matchers и дополнения
Изоляция DOM тестов
jsdom интеграция
Тестирование модулей
Тестирование ES6 модулей
Тестирование CommonJS модулей
Import и require в тестах
Mocking модульных зависимостей
Тестирование default exports
Тестирование named exports
Динамические imports
Код coverage
Понятие покрытия кода
Интеграция с Istanbul/nyc
Настройка coverage reporters
Интерпретация метрик coverage
Statement coverage
Branch coverage
Function coverage
Line coverage
Coverage thresholds
Jasmine в браузере
Standalone distribution
Настройка SpecRunner.html
Подключение source и spec файлов
Browser console reporter
Отладка в DevTools
Автоматизация browser тестов
Jasmine в Node.js
Установка через npm
CLI интерфейс
Программный API
Jasmine-node vs jasmine
Интеграция с npm scripts
Watching файлов для автоперезапуска
Exit codes и CI интеграция
Reporters
Встроенные reporters
Console reporter
HTML reporter
JUnit XML reporter
Custom reporters
Reporter interface
Multi-reporter setup
Форматирование вывода
Интеграция с инструментами сборки
Jasmine и Webpack
Jasmine и Rollup
Jasmine и Browserify
Karma runner интеграция
Настройка karma-jasmine
Headless browser testing
Watch mode в bundlers
TypeScript и Jasmine
Настройка TypeScript окружения
Type definitions для Jasmine
tsconfig для тестов
Typing для custom matchers
Typing для spies
Компиляция тестов
Source maps для debugging
Паттерны организации тестов
Arrange-Act-Assert паттерн
Given-When-Then стиль
Test builders и factories
Object Mother паттерн
Test data builders
Shared examples
Вложенность describe блоков
Mocking и stubbing стратегии
Различия между mock, stub, spy
Dependency injection для тестируемости
Manual mocking
Constructor injection
Property injection
Mocking внешних dependencies
Partial mocking объектов
Тестирование AJAX запросов
Фикстуры для HTTP
Jasmine-ajax плагин
Установка fake XMLHttpRequest
Stubbing запросов
Проверка request parameters
Симуляция ответов сервера
Тестирование error handling
Fetch API mocking
Продвинутые техники
Parameterized тесты
Data-driven testing
Property-based testing концепции
Test doubles сложных объектов
Тестирование приватных методов
Reflection для тестирования
Performance testing базовые подходы
Отладка тестов
Использование debugger
Console logging стратегии
Изоляция падающих тестов
Breakpoints в тестах
Stack traces интерпретация
Intermittent failures диагностика
Race conditions в тестах
Best practices
Принципы написания хороших тестов
FIRST принципы
Независимость тестов
Test naming conventions
Размер и scope тестов
Избегание тестовой хрупкости
DRY в тестах vs читаемость
Тестирование поведения vs реализации
Continuous Integration
Настройка на Jenkins
Настройка на GitHub Actions
Настройка на GitLab CI
Настройка на Travis CI
Параллельное выполнение тестов
Artifact сохранение
Флaky тесты в CI
Миграция и обновление
Миграция с Jasmine 2.x на 3.x
Миграция с Jasmine 3.x на 4.x
Миграция с Jasmine 4.x на 5.x
Breaking changes между версиями
Deprecation warnings
Стратегии постепенной миграции
Coexistence разных версий
Производительность тестов
Профилирование медленных тестов
Оптимизация setup/teardown
Параллелизация выполнения
Ленивая загрузка модулей
Кэширование в тестах
Mocking для скорости
Баланс между скоростью и coverage
Расширение Jasmine
Plugin архитектура
Создание custom matchers advanced
Создание custom reporters
Extending Jasmine API
Monkey-patching для расширения
Integration points
Публикация плагинов