Подтвердить что ты не робот

Как сделать Стамбул источником покрытия для всего моего исходного кода?

В настоящее время в Стамбуле генерируется только покрытие для файлов, которые используются в моих тестах, и это нормально, но, похоже, преследует цель иметь покрытие несколько.

У меня нет конфигурации в Стамбуле, и я вызываю ее через npm test со следующей строкой script:

$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/

Есть ли способ создать покрытие для всего моего исходного кода?

4b9b3361

Ответ 1

Нашел ответ, я думаю, что мне отчасти повезло, что выбранная мной структура каталогов позволяет мне использовать эту опцию, но теперь моя тестовая команда:

$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/

--include-all-sources является важной частью.

Ответ 2

В Стамбуле рекомендуется использовать nyc, чтобы проверить покрытие кода. Он предлагает такой подход:

nyc mocha

После выполнения этой команды мы получим отчет о покрытии. Но есть пара подводных камней.

Прежде всего, по умолчанию mocha ищет тесты в папке test. Чтобы переопределить его, мы должны установить собственный путь в файле mocha.opts следующим образом:

nyc mocha --opts ./mocha.opts

И mocha.opts содержит такой код, например:

spec/unit/back-end/**/*.spec.js

Другая проблема заключается в том, что по умолчанию nyc проверяет наличие только требуемых файлов, о чем идет речь. Решение состоит в том, чтобы установить два параметра для nyc (я запускаю тест как npm script, поэтому я устанавливаю параметры в package.json). Вот код:

"nyc": {
  "all": true,
  "include": [
    "routes/*.js",
    "routes/**/*.js",
    "models/*.js"
  ]
},
"scripts": {
  "mocha": "nyc mocha --opts ./mocha.opts",
}

Другой способ добиться этого - установить параметр include, но exclude, чтобы исключить из проверки правильности недопустимые файлы. Странно, но единственный вариант all не работает, ему нужны опции include или exclude. Вы можете получить дополнительную информацию о параметрах nyc через nyc --help.

P.S. Я не знаю nyc и mocha глубоко, и я основываюсь только на собственном опыте.

Ответ 3

Для создания покрытия для всех файлов, есть следующее в вашем package.json

"istanbulCoverage": " nyc --reporter = lcov --reporter = text-lcov --all -x \"./node_modules/\ "-x \"./охват/\ "проверка-покрытие --functions 90 npm run test "

Здесь флаг --all выбирает все файлы в вашем проекте. Если вы хотите исключить определенные файлы или папки, вы можете использовать опцию -x.

Помимо этого, если вы хотите указать уровень покрытия для своего приложения, используйте опцию проверки покрытия, чтобы указать пороговое значение. В моем случае я указал функции с порогом покрытия 90%. В противном случае создание отчета о покрытии завершится неудачно (я запускаю тест кармы после создания отчета о покрытии).

Надеюсь, это помогло :)

Ответ 4

В моем случае --include-all-sources у меня не сработало. Файлы, которые не require -d, все еще были исключены из окончательного отчета о покрытии.

В конце концов, я столкнулся с этой проблемой на GitHub istanbul где сопровождающий заявил:

Да, это ожидаемое поведение. Стамбул работает, перехватывая require, поэтому, если файл никогда не требует -d, он как будто его не существует.

Единственное надежное решение, которое я нашел, - вручную require все файлы, которые я хотел включить в свой отчет о покрытии. Я создаю файл include-all.test.js вместе с другими моими тестовыми сценариями и добавляю следующий include-all.test.js кода:

var glob = require( 'glob' )
var path = require( 'path' );

glob.sync( './path/to/js/code/*.js' ).forEach( function( file ) {
    // we don't care about errors here, we just want to require the file
    try {
        require( path.resolve( file ) );
    } catch(e) {}
});

Это гарантирует, что ваши непроверенные файлы будут включены в отчет о покрытии в istanbul.