Покрытие кода с Mocha в node.js - PullRequest
3 голосов
/ 06 марта 2012

Введение

Я установил jscoverage и настроил команду make для генерации данных покрытия для app-cov и запускаю тесты.

Для этого проекта я использую: node.js, mongoose, express, mocha и should.

Соответствующие файлы:

Makefile: http://pastie.org/3529374

index.js: http://pastie.org/3529377

test / models / location.test.js: http://pastie.org/3529401

app / run.js: http://pastie.org/3529523

Задача

Вывод coverage.html обзора файла пуст. 0% 0 SLOC 0 файлов в обзоре.

Я предполагаю, что mocha не распознает или не загружает покрытие из app-cov. Я написал только один модульный тест для модели местоположения. Это то, как мне требуются файлы в тесте?

Я использую phpunit и его конфигурацию, поэтому у меня возникли небольшие проблемы при сборке набора тестов.

Подходит всем, кто может порекомендовать решение или как привести мой код в порядок:)

1 Ответ

3 голосов
/ 06 марта 2012

В вашем make-файле много проблем.

1- Зачем вам нужна переменная TESTS? Ваши тесты находятся в подкаталоге test /, поэтому, если у вас нет других файлов .js (зачем вам?), То это значение по умолчанию для mocha: «По умолчанию mocha (1) будет использовать шаблон ./test/*. js, так что обычно это хорошее место для тестирования. "

2- И ваши записи test:, и test-cov: устанавливают для переменной среды EXPRESS_COV значение 1, что означает, что у вас нет возможности запускать тесты без опции покрытия (т.е. с make-файлом, то есть). Это может быть хорошо, если вы всегда хотите делать тесты с покрытием, но тогда зачем иметь 2 записи? Посмотрите на экспресс-библиотеку Makefile для хорошего примера. Если вы следуете этому примеру, ваша запись test: НЕ должна устанавливать EXPRESS_COV.

3- Ваша запись gen-cov неверна, на самом деле она должна называться app-cov: в зависимости от имени подкаталога, в котором вы храните свои инструментированные файлы. Кстати, почему бы не выбрать стандартную "lib-cov" (и "lib" для ваших неинструментированных js-файлов)? Конечно, не требуется, но это соглашение, которому следуют многие в сообществе.

4- Почему вы удаляете свои инструментированные файлы перед запуском jscoverage? Не уверен, что это может вызвать проблемы с make, не думайте так, но это бесполезно и должно быть удалено.

5- test-cov теперь должен зависеть от app-cov (это, вероятно, суть проблемы, make никогда не обнаруживала, что зависимость устарела, потому что зависимость не существует!). test-cov действительно устанавливает и должна устанавливать переменную окружения EXPRESS_COV = 1.

6- В test-cov ваш «l» в cover.html, похоже, находится на отдельной строке, хотя это может быть вставка.

Напомним (я сохранил app и app-cov, хотя я предлагаю lib и lib-cov):

REPORTER = dot
test:
    @NODE_ENV=test ./node_modules/.bin/mocha -b \
    --reporter $(REPORTER)

app-cov:
    jscoverage app app-cov

test-cov: app-cov
    @EXPRESS_COV=1 $(MAKE) test REPORTER=html-cov > docs/report/coverage.html

.PHONY: test 

Редактировать: И я только что заметил, что в вашем тестовом коде вы require явно указали модель в папке / app /. Вы должны использовать переменную EXPRESS_COV, как вы это делали в индексном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...