Стамбул с мокко, nodejs всегда дает одинаковое покрытие

Я настроил Стамбул, чтобы проверить покрытие кода для моего API в узле. Я сбит с толку, если я понял всю идею, если тестовое покрытие неправильно. У меня есть структура каталога как -app, содержащая -api -controllers -models -test -api_test.js

running istanbul cover _mocha запускает все тестовые примеры в api_test.js и возвращает покрытие в виде утверждений: 46,55% (27/58) ветвей: 0% (0/18) функций: 0% (0/13) строк: 48,21% (27/58) 56 )

Но затем я удаляю кучу тестовых случаев, перезапускаю Стамбул, но статистика покрытия остается прежней. Согласно моему пониманию инструмента, он должен давать мне статистику, согласно которой все строки кода моих тестовых случаев привели к выполнению SO, что технически должно было уменьшить тестовое покрытие, когда я запускаю меньшее количество тестов. Кроме того, мой HTML-отчет содержит статистику покрытия только некоторых моделей (даже не всех). Так что это добавляет путаницы, правильно ли я настроил тестовый набор и Стамбул или нет. Буду признателен за любую помощь, так как я новичок в node.


person Sahil Sharma    schedule 30.11.2015    source источник
comment
у вас мокко и стамбул установлены локально или глобально?   -  person Kunal Kapadia    schedule 30.11.2015
comment
Что произойдет, если вы запустите instanbul с пустым набором тестов, покажет ли он покрытие 0%? Я не думаю, что это неразумно, что удаление пары тестов все равно приведет к тому же покрытию. Если вы выберете конкретный модуль и удалите все тесты, ссылающиеся на этот модуль (необходимо убедиться, что этот модуль не импортирован/не используется другими модулями, у которых есть тесты), снизятся ли результаты тестового покрытия?   -  person dm03514    schedule 30.11.2015
comment
0 прохождения (1 мс) @ dm03514 Я все еще получаю ту же статистику покрытия.   -  person Sahil Sharma    schedule 01.12.2015


Ответы (2)


istanbul предназначен для покрытия кода файлов исходного кода. mocha содержит тестовые случаи. У вас может быть один тестовый пример, на который приходится 100% вашего исходного кода, и Стамбул сообщит о 100%. Вы можете добавить больше тестовых случаев (для разных путей, случаев и т. д.), но Стамбул сообщит то же самое, потому что первый тестовый пример был на 100%.

Думаю, у вас все правильно настроено. В вашем вопросе вы достигаете определенных уровней охвата, просто запуская свои тесты, которые, в свою очередь, загружают ваши исходные файлы. Имея один тестовый пример или 100, исходные файлы все равно обрабатываются при загрузке. Вы знаете, что не слишком много тестируете, когда видите такие вещи Branches : 0% ( 0/18 ) Functions : 0% ( 0/13 ), но все же имеете некоторое покрытие линии.

Стамбул изменит свои результаты, когда ваши тестовые примеры будут использовать больше тестируемого исходного кода.

person clay    schedule 30.11.2015

@clay Спасибо, это помогло. Итак, что я выяснил сейчас, так это то, что в моем случае у меня есть тесты mocha, которые просто вызывают конечные точки API и получают результаты. Таким образом, при запуске тестов практически не загружаются исходные файлы, и, следовательно, покрытие кода практически никогда не меняется. Я решил эту проблему, включив файлы, которые мне нужно охватить, поверх моих тестовых случаев. Это было бы просто фиктивным требованием, которое можно было бы использовать только для загрузки моих исходных файлов для покрытия. Я могу потребовать файлы или папки, и все эти исходные файлы будут отслеживаться и при выполнении будут добавлены в отчет. Я надеюсь, что это должно быть полезно для кого-то еще, столкнувшегося с подобной путаницей.

person Sahil Sharma    schedule 01.12.2015