Существует модуль foo
, который содержит строки, которые нельзя проверить, когда он загружен как модуль Node.js:
if (typeof module !== 'object') {
do.something(); // line shows as uncovered
}
...
Обычно эту строку нельзя проверить с помощью require('./foo')
, поскольку module
всегдаправда и не может быть смоделирована вне модуля без подключения к загрузчику модулей Node.
Поэтому я должен оценить его без require
, чтобы иметь полный контроль над локальными переменными модуля:
const fooSource = fs.readFileSync(fooPath);
new Function('module', fooSource)();
expect(do.something).toHaveBeenCalled();
Этоработает, но этот тест игнорируется тестовым покрытием.
Насколько я понимаю, покрытие кода Jest (Стамбул) подключается к загрузчику модуля Node.js и украшает тело модуля инструкциями покрытия, например:
if (typeof module !== 'object') {
cov_v50bukkd.f[2]++;
do.something(); // shows as uncovered
}
Как можно включить покрытие для этой линии?
Я бы предпочел не просто отмечать foo
со 100% покрытием, а сделать его реальным покрытием, если это возможно, как, например, оформление fooSource
с инструкциями покрытия вручную.
Я исхожу из того факта, что исходный код foo
не следует изменять для обеспечения покрытия кода;в других отношениях это уже достаточно для проверки.