使用Vitest生成覆盖率报告时报错的解决方案

一个意料之外的包冲突

spark1e ·

问题代码:Github - vite-plugin-auto-mpa-html

通过排除法发现,mock-fs与Vitest的覆盖率引擎(c8/istanbul 都有此问题)有冲突,报错:

Cannot find package '@vitest/coverage-c8' imported from /my/code/path/to/vite-plugin-auto-mpa-html/node_modules/local-pkg/index.mjs

一般来说,找不到包是因为没有安装到node_modules下,但是反复确认、重装后确认在目录内,那么问题就是出现在其他地方。检查coverage时的输出发现,没有引用mock-fs的测试可以顺利通过。

进一步排查,考虑到是模拟目录下没有node_modules目录,在模拟目录下增加,即,将外部完整的node_modules挂载到mock目录下:

const mockedProject = {
  "node_modules": mock.load(
    path.resolve(__dirname, '..', "node_modules")
  ),
}

覆盖率测试可以通过。

所以目前锁定,如果使用mock-fs虚拟一个目录,那么vitest在生成覆盖率时会读取mock-fs的目录,进而产生了此问题。

Dive In

To be continued...

使用Vitest生成覆盖率报告时报错的解决方案
本文作者
spark1e
发布于
2023-03-22
许可协议
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!
评论区 - Powered by Giscus