Покрытие кода 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

Другие вопросы по тегам