【问题标题】:Angular CLI - How to pick up .spec.ts files outside of the src folder?Angular CLI - 如何在 src 文件夹之外获取 .spec.ts 文件?
【发布时间】:2018-05-02 01:38:12
【问题描述】:

我有一个 Angular CLI 项目,其 NgModule 位于 /src 文件夹之外(最终这个 NgModule 将被打包为一个 npm 模块,但现在我只是将它留在 /src 之外)。

我正在尝试为此 NgModule 编写单元测试,但 ng test 似乎没有在 /src 文件夹之外获取 .spec.ts 文件。

我已尝试更改/src/test.ts 中的路径:

// Original
const context = require.context('./', true, /\.spec\.ts$/);

// Does not work
const context = require.context('../', true, /\.spec\.ts$/);

// Does not work
const context = require.context('/absolute/path/to/ngmodule', true, /\.spec\.ts$/);

但我得到一个错误:Module build failed: Error: /absolute/path/to/file.spec.ts is not part of the compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.

我还尝试在tsconfig.spec.jsoninclude 属性中添加 NgModule 的路径:

"include": [
  "../my-ng-module/**/*.spec.ts",  // Added this
  "**/*.spec.ts",
  "**/*.d.ts"
]

但没有成功。有什么想法吗?

【问题讨论】:

    标签: angular angular-test


    【解决方案1】:

    在 tsconfig.spec.json 中

     "include": [
        "../*.spec.ts", // your spec file location parent of src or ../yourpath/
        "**/*.spec.ts",
        "**/*.d.ts"
      ] 
    

    在test.ts中

    如果您选择父目录,它也会选择其他规范,因此当 选择 src 的父目录然后给你的组件名称或指定 您的规范的确切路径

     const context1 = require.context('./', true, /\.spec\.ts$/);//
     const context = require.context('../', true, /app\.component\.spec\.ts$/);//
     context.keys().map(context);
     context1.keys().map(context1);
    

    当您在 src 的父文件夹中时,相同的上下文正在获取 node_modules 中的文件,因此我们需要提及 spec.ts 名称。

    src 中的spec.ts 文件将像以前一样运行

    应用规范在 src 的父级中,游戏规范在 src 文件夹中

    如果您只想指定根目录并从那里开始 选择所有规范文件然后我们给出不同的命名约定 这与 node_modules 中的规范文件不同。说出哪些已出 src 作为 yourapp.componentout.spec.ts 并且在里面 在app.componentin.spec.ts 中,您可以提供一条路径而不是两条 目录

    const context = require.context('../', true, /out\.spec\.ts$|in\.spec\.ts$/);//
    context.keys().map(context);
    

    或其他方式遵循仅在 src 之外的文件的命名约定并放置

     const context1 = require.context('./', true, /\.spec\.ts$/);//
     const context = require.context('../', true, /out\.spec\.ts$/);//
     context.keys().map(context);
     context1.keys().map(context1);
    

    如果您不想更改规范文件名,请提供模块位置的路径而不是其父级,您可以在其中跳过 node_modules 部分。

    基本上,我们可以根据需要更改以下内容

      require.context(directory, useSubdirectories = false, regExp = /^\.\//)
    

    希望对你有帮助!!!

    参考:https://webpack.js.org/guides/dependency-management/#require-context

    【讨论】:

    • 很好的答案!我永远不会想到tests.ts 中的其他上下文,我在任何地方都没有看到有关此的文档。非常感谢发帖
    • :) 谢谢!我很高兴它对你有所帮助:)
    • 注意到你不能在require.context 中使用变量,因为似乎 webpack 解析它而不是解释它?!
    • 非常感谢您的发帖,这正是我正在寻找的内容
    【解决方案2】:

    以下命令会有所帮助

    ng test --include='src/app/modulefolder/**/*.spec.ts'
    

    【讨论】:

      猜你喜欢
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2016-09-26
      • 2021-10-02
      相关资源
      最近更新 更多