Покрытие метеора, похоже, показывает, что выполненные операторы не покрыты

Я использую пакет покрытия метеора (версия 1.1.4) с мокко (версия 2.4.5_6) и версию метеора 1.4.4.1 в Ubuntu 14.04 LTS. Мне удалось создать очень красивые отчеты о покрытии тестами, но кажется, что с тестами на стороне клиента что-то не так. Чтобы отправить данные покрытия на localhost:3000/coverage, я создал функцию с именем sendCoverage(), которую я импортирую в свои файлы .tests.js:

export const sendCoverage = function sendCoverage() {
    Meteor.sendCoverage(function(stats,err) {console.log(stats,err);});
};

Я вызываю эту функцию после блока тестов мокко:

after (function () {
    sendCoverage();
});

Теперь это создает отчеты о тестовом покрытии на моей странице localhost: 3000/coverage, но кажется, что покрытие не отображается должным образом. Например, я вижу, что некоторые операторы выполняются, но выделены красным цветом и помечены как не покрытые. Например:

пример покрытия

Кажется, что операторы выполняются 11 и 12 раз соответственно. Однако они не помечены как охваченные, и в моих отчетах это отражено в процентах охвата утверждений.

Кто-нибудь знает, что я могу делать неправильно, и/или есть опыт работы с покрытием кода на стороне клиента и пакетом покрытия метеоров?

Спасибо!

Редактирование после решения

Кажется, теперь у меня это работает. Проценты на Codacy совпадают с процентами в моем HTML-отчете. Глядя на отчет в формате html, кажется, что цифры покрытия все-таки были правильными. Это была просто детализация, которая показывала странное поведение. Итак, вывод таков, что это сработало, но мне потребовалось второе мнение Codacy, чтобы подтвердить это мне. Мой новый подход будет заключаться в создании отчетов о покрытии lcov с помощью spacejam (см. ответ Сера ниже) и экспорте их во внешние службы, такие как Codacy, Codecov или SonarQube.

Спасибо Серут за участие!


person Gijs    schedule 30.05.2017    source источник


Ответы (1)


Я автор метеорного репортажа. Рад видеть, что пакет хорошо работает в вашем приложении!

Во-первых, я не думаю, что ваш способ сбора покрытия и сохранения отчетов оптимизирован: не создавайте утилиты с функцией сохранения покрытия. Вы можете сохранить покрытие для каждого файла, просто используя (при условии, что Meteor.sendCoverage всегда существует в тесте).

after (function () {
    Meteor.sendCoverage(()=>{});
});

С другой стороны, вы не должны писать код в своем тестовом файле, чтобы сохранить покрытие. Средство запуска тестов может сделать это за вас, например, Я добавил вилку Spacejam. Вы можете попытаться экспортировать отчеты html и lcov, используя serut/spacejam.

Я думаю, что формат lcov более надежен, чем отчет html. Если я посмотрю какой-нибудь отчет о покрытии клиентского кода судя по метеоритному покрытию, все выглядит связно. Попробуйте отправить файл lcov на платформу Code Quality, такую ​​как Sonar, Codecov или Codacy. Я надеюсь, что это решит проблему с линией, которая может быть связана со Стамбулом и его генерацией html-отчета.

person Ser    schedule 03.06.2017
comment
Привет, Серут, спасибо за ответ! Я попытался использовать космический джем для запуска тестов так, как вы объяснили. Однако это привело к следующему выводу ошибки в моей консоли: => Started proxy. => Started MongoDB. spacejam: meteor mongodb is ready spacejam: killing meteor spacejam: Unknown error with exit code 'null'. Exiting. Я пытался найти что-нибудь об этом в Интернете, но все проблемы, связанные с этим, похоже, связаны с поддержкой Windows, которая, поскольку я разрабатываю свое приложение на Ubuntu, не работает. кажутся применимыми ко мне. Вы знаете, откуда может появиться эта ошибка? - person Gijs; 04.06.2017
comment
Трассировка стека слишком короткая, чтобы я мог узнать, что происходит, это может быть способ запуска spacejam (используйте meteor npm run <package.json script that uses spacejam>) или ошибка, связанная с вашей настройкой. Проверьте это ответвление, которое я сделал из apollographql/meteor-starter- kit, чтобы увидеть изменения, которые я внес для добавления покрытия. Или заполните задачу, если вы хотите, чтобы это было исправлено. - person Ser; 04.06.2017
comment
Итак, мне удалось запустить космический джем. В конце концов, мне пришлось использовать версию https://github.com/serut/spacejam/tarball/windows-suppport-rc4. Удалось создать файл lcov с предоставленными командами package.json в вашем репозитории и отправить его в Codacy для анализа. К сожалению, проценты остались прежними, то есть строки по-прежнему должны считаться ошибочно. Тем не менее, я сделал шаг вперед, так что спасибо! Я буду продолжать пытаться выяснить, что не так, и держать эту тему в курсе. Если у вас есть какие-либо другие предложения, дайте мне знать! - person Gijs; 04.06.2017
comment
Между прочим, он по-прежнему заканчивается следующим выводом -------------------------------------------------- ---------------------RESULTS---------------------- PASSED: 32 FAILED: 0 SKIPPED: 0 TOTAL: 32 -------------------------------------------------- -------------------------------------------------- spacejam: phantomjs exited with code: 0 spacejam: killing meteor spacejam: Unknown error with exit code 'null'. Exiting. Это также происходит после запуска команды для создания фактических отчетов о покрытии. - person Gijs; 04.06.2017
comment
Кажется, теперь у меня это работает. Проценты на Codacy совпадают с процентами в моем html-отчете. Глядя на отчет в формате html, кажется, что цифры покрытия все-таки были правильными. Это была просто детализация, которая показывала странное поведение. Итак, вывод таков, что это сработало, но мне потребовалось второе мнение Codacy, чтобы подтвердить это мне. - person Gijs; 05.06.2017
comment
Да, я должен опубликовать свой собственный форк spacejam прямо на npm, чтобы остановить эту путаницу. Приятно слышать, что Стамбул дает вам правильный процент покрытия! Кодаси показывает вам глубокий взгляд без ошибок? - person Ser; 05.06.2017
comment
Да, глубокий взгляд на Codacy не оставляет сомнений в том, были ли охвачены линии, функции или ответвления! :) - person Gijs; 05.06.2017