我已经尝试了几个小时,以便为使用vue-cli v3生成的新vue(基于打字稿)项目启动并运行伊斯坦布尔代码覆盖率报告。
每当我运行测试时:(nodemon --exec nyc vue-cli-service test:unit
)仅包含.ts文件,即使我已明确设置nyc应包括这些文件:
"nyc": {
"check-coverage": true,
"per-file": true,
"lines": 80,
"instrument": true,
"sourceMap": true,
"statements": 80,
"functions": 80,
"branches": 80,
"include": [
"apollo-server/**/*.{ts,vue}",
"apollo-server/*.vue",
"src/**/*.{ts,vue}",
"src/*.vue"
],
"exclude": [
],
"reporter": [
"lcov",
"text",
"text-summary"
],
"extension": [
".ts",
".vue"
],
"cache": true,
"all": true
}
我还尝试将nyc.instrument
和nyc.sourceMap
设置为false,以允许在webpack配置中使用自定义加载程序,如下所示:
module.exports = {
baseUrl: process.env.NODE_ENV === 'production'
? '/'
: '/',
configureWebpack: config => {
// if (process.env.NODE_ENV === "coverage") {
config = Object.assign(config, {
module: Object.assign(config.module, {
rules: config.module.rules.concat([
{
test: /\.(ts|tsx|vue)$/,
enforce: 'post',
include: [
path.resolve('src'),
path.resolve('apollo-server')
],
loader: 'istanbul-instrumenter-loader'
}
])
})
})
// }
}
我也尝试过使用vue.config.js > chainWebpack
钩子来执行此操作,并且当使用vue配置而不是package.json时,它根本不包含任何文件:
chainWebpack: config => {
if (process.env.NODE_ENV === "coverage") {
config.module
.rule("istanbul")
.test(/\.(ts|tsx|vue)$/)
.enforce("post")
.pre()
.include
.add(__dirname + "/apollo-server")
.add(__dirname + "/src")
.end()
.use("istanbul-instrumenter-loader")
.loader("istanbul-instrumenter-loader")
.options({
esModules: true
})
.end()
}
}
这可能是由于我在此配置中使用的__dirname + [filename]
,尽管我不知道它应该是什么。我正在基于以下链接进行此操作:their documentation,应该在其中添加'src'
,尽管它会导致错误,指出所包含的路径不是绝对路径。