it-swarm.com.ru

Карма vs тестирование фреймворка Жасмин, Мокко, QUnit

Несколько вопросов:

  • Как карма и система тестирования X (Jasmine, Mocha, QUnit) связаны друг с другом?
  • Какова эквивалентная структура в мире Java? Я предполагаю, что Jasmine, Mocha, QUnit равны jUnit/TestNG. Как насчет кармы?
  • Могу ли я запустить тестирование фреймворка X (например, Жасмин) без кармы?
  • Карма для модульного тестирования или интеграции/e2e теста? Это ссылка показывает для модульного теста, однако это сказано для e2e теста.
242
Lee Chee Kiam

Карма - браузерный тестовый бегун.

Идея заключается в том, что в браузерах изначально отсутствует концепция загрузки тестовых файлов, их запуска и составления отчетов о результатах. Что карма делает (примерно):

  • запуск небольшого веб-сервера для обслуживания javascript-файлов "на стороне клиента" (1)
  • также обслуживайте "клиентские" файлы JavaScript с помощью тестов (или спецификаций, как их часто называют) (2)
  • обслуживать пользовательскую веб-страницу, которая будет выполнять код JavaScript для тестов (3)
  • запустите браузер, чтобы загрузить эту страницу (4)
  • сообщить результаты теста на сервер (5)
  • карма может затем снова сообщать о результатах в текстовые файлы, консоль, все, что нравится вашему CI-серверу, и т. д ...

Глядя на каждую часть:

(1) Эти файлы будут вашими настоящими js-файлами; Вы скажете карме, как их загрузить. Если вы используете requirejs, есть плагин karma и необходим некоторый конфиг.

(2) Эти тесты могут быть написаны на различных платформах тестирования Javascript (Jasmine, QUnit, Mocha); это код JS, который запускается в браузере.

(3) Пользовательская веб-страница будет немного отличаться для каждой среды тестирования; Вот почему у кармы есть плагины для разных фреймворков.

(4) Карма может запускать страницу во многих браузерах (FF, Chrome или безголовых браузерах, таких как PhantomJs.)

(5) Отчетность перед кармой, опять же, зависит от фреймворка и связана с плагинами кармы.

Итак, чтобы ответить на ваши вопросы:

  • в Java большинство людей используют JUnit, который одновременно является средой для написания тестов и их запуска, но не имеет проблемы разграничения среды, в которой выполняются тесты, и среды, в которой агрегируются отчеты о тестах; Карма была бы отсутствующей частью между JUnit Suite и JUnit TestRunner
  • Да, вы можете делать все, что карма делает "вручную" - выбрать один каркас (жасмин, квит, мокко) и следовать инструкциям. Преимущество кармы в том, что она предоставляет готовое решение, если вы находитесь в стандартной настройке.
  • Карму можно использовать как для модульного теста (с jasmine/qunit/what), так и для интеграционных тестов (в которых для управления браузером будет использоваться другой API, например, webdriver)
392
phtrivier

Один более короткий способ понять разницу:

Люди, тестирующие с простым Jasmine/Mocha, скорее всего, запускают весь код с виртуальной машиной Node.

Добавление Karma в набор (поверх существующего фреймворка по вашему выбору) запустит ваш набор тестов с движком других браузеров.

Делая это, вы получаете небольшие дополнительные возможности, которые вы получаете в среде браузера. Будет проще тестировать код, связанный с DOM, но вы также будете отказываться от дополнительных ресурсов, предоставляемых движком Node (например, доступ к файловой системе/оболочке)

64
SystematicFrank

Тезис о парне, который разработал Карму, был очень информативным в описании существующих решений, их сравнении и, конечно, в описании самой Кармы.

https://github.com/karma-runner/karma/blob/master/thesis.pdf

Резюме: Карма - бегун-испытатель. Он может быть использован QUnit, Jasmine, Mocha, ... Karma имеет преимущества перед другими участниками тестирования, чтобы улучшить ваш цикл разработки TDD/BDD. Он "просматривает" файлы, поэтому, когда вы сохраняете изменения, Karma запускает тесты и мгновенно отчитывается, не переключая контекст в веб-браузер для запуска теста.

Короче, возможно вопрос должен быть карма и жасмин или мокко или квнит?

30
mauricio777