Pending спецификации

Pending спецификации (или пропущенные тесты) — это механизм, который позволяет маркировать тесты, которые не были завершены или которые в настоящее время не могут быть выполнены. Это полезный инструмент в процессе разработки, особенно на ранних этапах, когда тесты уже написаны, но реализация функционала еще не завершена или требуется дополнительное внимание.

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

Маркировка теста как Pending

Jasmine позволяет обозначать тесты как незавершенные двумя основными способами:

  1. Использование .xit() вместо .it()

    Метод .it() используется для написания теста, а его версия .xit() работает аналогично, но помечает тест как пропущенный. Когда тест объявлен через .xit(), он не будет выполнен во время тестирования, и его результат будет отмечен как «pending».

    xit('должен вернуть правильный результат', function() {
      expect(someFunction()).toBe(true);
    });

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

  2. Использование метода pending() внутри теста

    Другим способом является вызов метода pending() внутри спецификации. Если внутри теста вызывается pending(), то этот тест также считается пропущенным, и его выполнение не происходит.

    it('должен вернуть правильный результат', function() {
      pending('Этот тест еще не реализован');
      expect(someFunction()).toBe(true);
    });

    В данном примере, независимо от того, что тест имеет ассерты, он будет помечен как «pending» с описанием причины, указанной в методе pending().

Зачем использовать Pending спецификации

  1. Работа в команде и планирование задач

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

  2. Поддержка временной недоступности функционала

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

  3. Инкрементная разработка тестов

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

  4. Тестирование без ошибок при незавершенной реализации

    В случае, когда тесты написаны, но функциональность еще не завершена, использование pending() позволяет не затруднять процесс тестирования. Это позволяет сосредоточиться на тех тестах, которые могут быть выполнены, не сталкиваясь с ошибками, связанными с незавершенным кодом.

Pending в отчетах Jasmine

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

Пример вывода для пропущенных тестов:

Pending:
  должен вернуть правильный результат
  еще не реализовано

2 pending specs

Такие тесты не считаются ошибками и не влияют на итоговый статус выполнения тестов (например, количество ошибок или успешных тестов). Однако это может служить сигналом для команды, что определенные тесты все еще нуждаются в доработке.

Использование Pending в процессе разработки

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

Кроме того, в некоторых случаях необходимо оставить тесты для работы с внешними сервисами или данными, которые пока еще не настроены. В таких ситуациях также удобно использовать pending() или xit(), чтобы избежать выполнения этих тестов.

Плюсы и минусы использования Pending спецификаций

Плюсы:

  • Гибкость: Тесты можно временно исключить из выполнения, не удаляя их, что помогает сохранять четкую картину того, что еще предстоит реализовать.
  • Планирование: Легко отмечать и отслеживать незавершенные тесты, не забывая о них в будущем.
  • Инкрементный подход: Дает возможность поэтапно внедрять тесты, поддерживая рабочий процесс, даже если весь функционал еще не реализован.

Минусы:

  • Забывание о тестах: Без должного внимания пропущенные тесты могут остаться без выполнения на длительный период времени.
  • Отсутствие обратной связи: Пропущенные тесты не дают полезной информации о том, что именно нужно доработать в функционале, как это делают неудачные тесты.

Когда не стоит использовать Pending

Нельзя злоупотреблять использованием пропущенных тестов, так как это может привести к тому, что важные тесты останутся не завершенными и забудутся. Особенно в случае с большим количеством пропущенных тестов может возникнуть ситуация, когда статус “pending” не отражает реального состояния проекта.

Важно помнить, что использование pending() или xit() должно быть временной мерой. Если тест не может быть завершен в течение длительного времени, стоит задуматься о переработке подхода к тестированию или изменении стратегии разработки.

Заключение

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