Покрытие кода JavaScript в модулях RequireJS / AMD
Короткий и, казалось бы, глупый вопрос, потому что он такой простой, и вы можете подумать, что он вездесущ: есть ли у кого-нибудь покрытие кода для работы с внешним интерфейсом RequireJS (не NodeJS)?
Кажется глупым вопросом из-за преобладания подходов TDD в мире JS и захвата развития AMD.
Я перепробовал миллион подходов, всем не хватает. Мой проект - это Backbone-проект с Jasmine Unit Tests:
1) JSTD с плагином Coverage. JSTD имеет проблемы с правильной загрузкой и инструментарием модулей AMD. Если я запускаю JSTD для одного файла js (в сочетании с оптимизатором RequireJS), тогда покрытие кода работает прекрасно, за исключением того, что покрытие затем собирается и метрики определяются в файле ВЕСЬ. Отлично, это бесполезно, потому что это включает сторонние библиотеки, и потому что я не могу предназначаться для единственного модуля, чтобы помочь проверить разработку. Argh.
2) JSCoverage - полный провал, не любит модули AMD.
3) "живые" инструкторы Chrome и Firebug - терпят неудачу, не любят модули AMD.
Кажется, что каждый подход, который я пробую, требует огромного количества специальной работы. Так может мне нужно раскрутить нестандартное решение с нуля?
Как насчет следующего подхода: разверните оптимизатор RequireJS до кода инструмента и создайте покрытие. Это будет инструментарий в памяти, который можно включить с помощью флага require.config({ instrument: true }). Каждый раз, когда требуется загрузить модуль, он автоматически обрабатывает его и помещает в свой репозиторий модулей. Статистика покрытия собирается в объекте под глобальным объектом запроса и доступна из любого места, скажем, после теста Jasmine.
Ввод?
5 ответов
Blanket.js работает с Qunit, используя модифицированный загрузчик RequireJS. Мы работаем над поддержкой Jasmine и будем рады любым отзывам и предложениям.
Если ваш проект запущен в производство, Blanket.js не для вас, но если это просто сторонний проект, возможно, стоит посмотреть, соответствует ли он вашим потребностям.
РЕДАКТИРОВАТЬ: Бланкет теперь поддерживает Жасмин.
Что ж, получается, что Node-Coverage на самом деле предоставляет независимый от AMD интерфейс, который прекрасно работает с RequireJS и Jasmine, предоставляя код для инструментирования со своего собственного сервера.
Я все еще потрачу некоторое время на работу над реализацией покрытия RequireJS, которую я начал, поскольку для этого не потребуется запускать отдельный сервер.
mochawrapper
Я только что написал модуль узла, который автоматизирует отчеты о покрытии. Он основан на мокко, jscoverage и подтверждении узла. Вам не нужно изменять требовать или использовать переменные make или enviornment.
Он размещен на github: mochawrapper
Возможно, jscoverage не работает в браузере, поэтому вы можете посмотреть на: bunker, который основан на uglify-js
В чем конкретно ваша проблема с модулями AMD и JSCoverage? У меня есть настройка (QUnit/PhantomJS/JSCoverage), работающая с модулями AMD.
Может быть, вы просто забыли правильно настроить пути к вашим библиотекам в require.config?
После того, как я изменил пути к библиотекам, чтобы использовать инструментальный код, вместо "обычных" файлов, все работало.
Проверьте проект, который я недавно выпустил, для удобных отчетов о покрытии в браузере javascript, JSCovReporter https://github.com/TwoApart/JSCovReporter