网站搜索

为什么在 Node TypeScript 项目中使用 Jasmine 进行 Karma 单元测试时,覆盖率会包括依赖项?


正如主题所述,我们项目的代码覆盖范围包括一个 Node 依赖项。然而请注意,这个 npm 依赖项的源代码也是项目的一部分,因为我们负责开发和发布它。项目结构如下:

  • 根

    • 主项目

      • karma.conf.ts
      • 主项目
      • karma.conf.ts

      • 待测试的 src 文件及其他文件,并为其生成覆盖率
      • 测试
    • 作为边项目打包并发布到 npm,并在包括这个项目在内的多个项目中使用

      • 源 等

所以,即使我的 Karma 配置在 main_project(图中为 src 和 src/*)文件夹中,我想要测试并生成覆盖率,Karma 仍然会将 side_project(图中为 petreol-api-wrapper)也包含在覆盖率中,如下所示:

这是我相关的 karma 配置:

const testRecursivePath = "test/*Test.ts";
const srcOriginalRecursivePath = "src/**/*.ts";
frameworks: ["jasmine"],
reporters: [
    "progress",
    "junit",
    "coverage-istanbul"
],
files: [
    testRecursivePath,
    {
        pattern: srcOriginalRecursivePath,
        included: false,
        served: true
    }
],
preprocessors: {
    [testRecursivePath]: ["webpack", "coverage"]
},

有人能帮我一下吗?

答案#1

在 karma.conf 中有一个选项可以排除文件,例如,下面的配置将排除 node_modules 文件夹中的所有 ts 文件。你可能需要使用我在下面示例中提供的相对路径。你可以使用 **.* 来忽略所有文件。

exclude: [
        "node_modules/**/*.ts"
]

用作

const testRecursivePath = "test/*Test.ts";
const srcOriginalRecursivePath = "src/**/*.ts";
frameworks: ["jasmine"],
reporters: [
    "progress",
    "junit",
    "coverage-istanbul"
],
files: [
    testRecursivePath,
    {
        pattern: srcOriginalRecursivePath,
        included: false,
        served: true
    }
],
exclude: [
        "node_modules/**/*.ts"
]
preprocessors: {
    [testRecursivePath]: ["webpack", "coverage"]
},