11

我已经尝试了几个小时来为我的新 vue(基于 typescript)项目启动并运行伊斯坦布尔代码覆盖率报告,该项目是使用 vue-cli v3 生成的。

每当我运行我的测试时:(nodemon --exec nyc vue-cli-service test:unit)只包含 .ts 文件,即使我已经明确设置 nyc 应该包含这些文件:

包.json

"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 配置中允许自定义加载器,如下所示:

Vue.config.js

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 时,它会导致根本不包含任何文件:

Vue.config.js 使用 chainWebpack 而不是 configureWebpack

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]我在这个配置中使用的,虽然我不知道它应该是什么。我是基于此链接执行此操作的:https ://github.com/vuejs/vue-cli/issues/1363 ,我应该在其中添加'src',尽管它导致错误指出包含的路径不是绝对的。

4

0 回答 0