Computer Science

Учебник Тестирование на JavaScript (Jest) для начинающих

24 урока · 6 разделов · бесплатно, без регистрации

Этот курс учит писать надёжные автоматические тесты для JavaScript-кода с помощью Jest — самого популярного тестового фреймворка экосистемы. Вы научитесь устанавливать и запускать Jest, выбирать правильные матчеры, группировать и изолировать тесты, тестировать асинхронный код, подменять зависимости моками, измерять покрытие и встраивать тесты в CI. Курс рассчитан на тех, кто уже знает JavaScript и хочет уверенно покрывать код тестами.

Важная деталь: код Jest исполняется в Node, а не в браузере, поэтому примеры с test/expect в курсе подаются как иллюстрации (подсветка без кнопки «Запустить»). Чтобы идея теста была осязаемой, ключевые принципы мы показываем живыми вставками на чистом JavaScript, которые реально запускаются прямо на странице.

Курс «Тестирование на JavaScript (Jest)» состоит из 6 разделов и 24 уроков: Введение: зачем тесты и первый Jest, Матчеры (matchers), Организация тестов, Асинхронность и моки, Тестирование в реальных проектах и Качество и практика тестирования. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение: зачем тесты и первый Jest

    1. Зачем нужны юнит-тесты в JavaScript

      Что такое юнит-тест, какие проблемы он решает в JavaScript-проекте и почему ручная проверка не масштабируется.

    2. Что такое Jest и как его установить

      Знакомство с фреймворком Jest, установка через npm, настройка package.json и запуск тестов через npx jest и watch-режим.

    3. Первый тест: test и expect

      Пишем первый тест на Jest с функциями test и expect, разбираем синтаксис и понимаем, как читать результат.

    4. Структура теста: describe, it и шаблон AAA

      Группировка тестов через describe, читаемые it и шаблон Arrange-Act-Assert для чистой структуры теста.

  2. 2 Матчеры (matchers)

    1. Равенство: toBe против toEqual

      Разница между toBe и toEqual в Jest: строгое равенство примитивов и структурное сравнение объектов и массивов.

    2. Истинность: null, undefined и truthy

      Матчеры истинности в Jest: toBeNull, toBeUndefined, toBeDefined, toBeTruthy и toBeFalsy и когда они нужны.

    3. Числа, строки и массивы

      Числовые матчеры Jest (toBeGreaterThan, toBeCloseTo), строки и массивы (toContain, toMatch) для точных проверок.

    4. Исключения и отрицание not

      Проверка ошибок через toThrow и инверсия любого матчера через not в Jest, с правилом про функцию-обёртку.

  3. 3 Организация тестов

    1. Группировка и вложенные describe

      Организация тестов вложенными блоками describe для читаемой структуры и понятного дерева отчёта в Jest.

    2. Хуки: beforeEach, afterEach, beforeAll, afterAll

      Хуки жизненного цикла Jest: beforeEach, afterEach, beforeAll, afterAll — подготовка и очистка состояния тестов.

    3. Изоляция, skip и only

      Изоляция тестов в Jest, временное отключение через test.skip и фокус на одном тесте через test.only.

    4. Параметризация: test.each

      Параметризованные тесты в Jest через test.each: один сценарий с разными данными без дублирования кода.

  4. 4 Асинхронность и моки

    1. Тестирование async-кода

      Как тестировать промисы и async/await в Jest: возврат промиса, resolves/rejects и колбэк done.

    2. Мок-функции: jest.fn()

      Мок-функции Jest через jest.fn(): отслеживание вызовов, аргументов, задание возвращаемых значений и проверки.

    3. Мок модулей и шпионы

      Подмена модулей через jest.mock и наблюдение за реальными методами через jest.spyOn в тестах Jest.

    4. Фейковые таймеры

      Фейковые таймеры Jest через useFakeTimers и advanceTimersByTime для быстрого и детерминированного теста таймаутов.

  5. 5 Тестирование в реальных проектах

    1. Что именно тестировать

      Как выбрать, что покрывать тестами: бизнес-логика, утилиты, граничные случаи и где тесты не приносят пользы.

    2. Тестирование UI: Testing Library

      Обзор Testing Library поверх Jest: философия «как пользователь», запросы по тексту и роли вместо деталей DOM.

    3. Снапшот-тесты

      Снапшот-тесты в Jest через toMatchSnapshot: как работают, плюсы, минусы и когда их применять осознанно.

    4. Покрытие кода

      Измерение покрытия в Jest через --coverage: что значат метрики, как читать отчёт и почему 100% не самоцель.

  6. 6 Качество и практика тестирования

    1. Признаки хороших тестов

      Свойства хороших тестов: быстрые, изолированные, детерминированные и читаемые — на примере принципов FIRST.

    2. Антипаттерны и флаки

      Антипаттерны тестов: проверка реализации, флаки-тесты, ложная зелень и хрупкость — как их распознать и избежать.

    3. TDD: red-green-refactor

      Test-Driven Development в JavaScript: цикл red-green-refactor, сначала тест — потом код, и зачем это нужно.

    4. CI, Vitest и чек-лист

      Запуск Jest в CI (GitHub Actions), краткий обзор альтернативного раннера Vitest и итоговый чек-лист по тестированию.