我有一个带有 Vite(和 Vitest)的 Nuxt3 项目,在我仅导出类型或接口的文件中,我收到的覆盖率为 0%(这些正在项目的其他部分中使用)。但是,在定义了实际功能和类型或接口的文件中,我收到了 100% 的覆盖率。问题可能出在哪里?
具体来说,LogInResponse、LogInRepositoryInterface 和 SessionRepositoryInterfaces 文件仅导出类型或接口,并且它们的覆盖率为 0%。然而,在文件 FetchLogInRepository 和 StorageSessionRepository 中,它们都有内部定义和使用的类型和接口,我收到了 100% 的覆盖率。
这是我的 vitest.config.ts 文件:
import path from 'path'
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vitest/config'
export default defineConfig({
plugins: [vue()],
test: {
environment: 'jsdom',
coverage: {
all: true,
include: ['Modules/Auth/**/*.ts']
}
},
resolve: {
alias: {
'~': path.resolve(__dirname)
}
}
})
这是 LogInResponse.ts 文件(0% 覆盖率),它被用作 LogIn.ts 方法(具有测试和 100% 覆盖率)的返回类型。
export type LogInResponse = {
status: 'ok'
} | {
status: 'error'
message: string | null
}
我设法通过将提供商从“c8”更改为“istanbul”来解决这个问题。为此,除了使用命令
yarn remove @vitest/coverage-c8
卸载“c8”并使用 yarn add @vitest/coverage-istanbul
安装“istanbul”之外,我还必须在 test.coverage.provider
中为属性 vitest.config.ts
设置值“istanbul”。现在,仅包含类型或接口的文件不再出现,并且它们也从具有类或其他可执行代码以及接口和类型的文件中消失。但是,我相信这个解决方案对我有用。
如果您仅导出类型,请尝试将文件从
LogInRepositoryInterface.ts
重命名为 LogInRepositoryInterface.d.ts
,以表示它们只是类型定义。 Vitest 测试覆盖率检查应该通过,因为它默认忽略 typedef 文件。