Я нашел решение, которое включает в себя несколько мелких взломов, но работает довольно хорошо.
Идея состоит в том, чтобы использовать инструмент покрытия кода и использовать его для проверки node_modules
, в дополнение к вашему коду.
nyc представляется популярнымМодуль покрытия кода, поэтому я пошел дальше и установил его: npm install -g nyc
Я создал небольшой пример, используя 2 зависимости:
index.js
const mkdirp = require('mkdirp')
const ejs = require('ejs')
ejs.render('test');
mkdirp('.');
Выполнение nyc node index.js
дает только покрытие для index.js, а это не то, что нам нужно:
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Похоже, nyc
не опускается в node_modules
и естьнет способа настроить это для этого.Эта проблема была также поднята в их репозитории Github: Включить определенные модули узлов # 833
К счастью, кто-то дал обходной путь: вручную измените test-exclude
, зависимость для nyc.
Вот как мне удалось заставить его работать:
Найти глобальную папку установки для nyc
(у меня есть: C:\Users\mihai\AppData\Roaming\npm\node_modules\nyc
)
В этой папке перейдите к node_modules\test-exclude
и отредактируйте index.js
Найдите этот массив:
exportFunc.defaultExclude = [
...
'**/node_modules/**'
]
Измените '**/node_modules/**'
на '**/nyc/node_modules/**'
Закомментируйте эти строки:
if (this.exclude.indexOf('**/node_modules/**') === -1) {
this.exclude.push('**/node_modules/**')
}
Теперь все настроено, и мы можем снова запустить nyc node index.js
:
----------------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------------------------|----------|----------|----------|----------|-------------------|
All files | 42.75 | 29.34 | 40.48 | 43.03 | |
myapp | 100 | 100 | 100 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
myapp/node_modules/ejs/lib | 42.37 | 28.5 | 36.11 | 42.37 | |
ejs.js | 42.2 | 29.32 | 44.44 | 42.2 |... 06,910,911,912 |
utils.js | 44.44 | 11.11 | 11.11 | 44.44 |... 42,156,159,162 |
myapp/node_modules/mkdirp | 41.07 | 33.33 | 66.67 | 43.14 | |
index.js | 41.07 | 33.33 | 66.67 | 43.14 |... 87,90,92,93,97 |
----------------------------|----------|----------|----------|----------|-------------------|
Обратите внимание на покрытие для ejs.js
и mkdirp
, показывая операторы, ветви, функции и строки.