Jasmine + JSTestDriver + Coverage + RequireJS

Ух ты, какой беспорядок. Это сценарий.

  • JS-приложение, управляемое магистралью.
  • RequireJS для функций AMD, инициализированный следующим образом:

    затем внутри main.js следующий код конфигурации:

    require.config(
    {
    пути:
     {
     ... : ...
     }
    });
    

    Каждое представление/модель/маршрутизатор Backbone является модулем «define(…)», и «require("theOneRouter", ...)» вызывается один раз в main.js.

  • r.js используется в качестве оптимизатора с Uglify/Closure. Один «скомпилированный» файл main.js создается в подпапке ./release, которую я динамически выбираю в своей среде .net.

  • Потребовалось немало времени, чтобы Backbone + Require.JS заработали, но теперь работает отлично!

  • Затем добавление Жасмин поверх этого также потребовало небольшой индивидуальной работы, но это сработало просто отлично. Мне пришлось загрузить require.js из моего SpecRunner.html, определить каждый тестовый модуль как AMD, используя вызов require define(...), и я создаю экземпляр и запускаю Jasmine один раз из вызова require(...) call один раз в SpecRunner.html:

    требуют(
    [
    //"тест/спецификации/testSpec1",
    "тест/характеристики/просмотры"
    ],
    функция ()
    {
    жасмин.getEnv().updateInterval = 1000;
    var reporter = новый jasmine.TrivialReporter();
    jasmine.getEnv().addReporter(репортер);
     ....
     ....
    });
    

    это тоже прекрасно работает. Тесты загружаются и запускаются, проблем нет. Require позаботится обо всем.

Теперь я хотел бы, чтобы среда, такая как JSTestDriver, выступала в качестве моего бегуна. Я выбрал JSTD за его простоту, возможность тестирования в удаленных браузерах, поддержку покрытия кода, но я по-прежнему открыт для других предложений.

JSTestDriver сам по себе работает нормально, единственная проблема, с которой я столкнулся, это запуск комбинации JSTD + Jasmine + ReuireJS вместе. Самая большая проблема заключается в том, что если я сообщаю JSTD в файле конфигурации о тестовом модуле Jasmine/Require, чтобы загрузить его, я получаю следующую ошибку:

http://requirejs.org/docs/errors.html#mismatch

Если я использую r.js для оптимизации всего моего кода в один main.js, комбинация работает, включая покрытие, но покрытие собирается в одном гигантском файле и его трудно анализировать. Не говоря уже о том, что обработка js-файла из 50 тыс. строк кода и его запуск через JSTD занимает очень много времени.

Я попытался создать js-файл, похожий на приспособление, который загружает все мои тестовые модули Jasmine и модули кода, но я продолжаю возвращаться к вышеупомянутой ошибке «несоответствия», И, если я не сообщаю JSTD о каждом модуле по отдельности (путем загружая фикстуру html/js, которая выполняет реальную загрузку), они не будут инструментированы для покрытия кода.

Кому-нибудь удалось заставить работать эту конкретную комбинацию? Может быть, я прошу слишком многого...

7
задан Bernardo 24 May 2012 в 20:54
поделиться