Angular CLI - 如何在src文件夹之外获取.spec.ts文件?

Ang*_*hef 6 angular angular-test

我有一个NgModule位于/src文件夹外部的Angular CLI项目(最终这个NgModule将打包为npm模块,但现在我只是把它留在了外面/src).

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

我试过改变路径/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$/);
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误: 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.

我也尝试在以下include属性中添加我的NgModule路径tsconfig.spec.json:

"include": [
  "../my-ng-module/**/*.spec.ts",  // Added this
  "**/*.spec.ts",
  "**/*.d.ts"
]
Run Code Online (Sandbox Code Playgroud)

但没有成功.有任何想法吗?

Amp*_*esh 6

在tsconfig.spec.json中

 "include": [
    "../*.spec.ts", // your spec file location parent of src or ../yourpath/
    "**/*.spec.ts",
    "**/*.d.ts"
  ] 
Run Code Online (Sandbox Code Playgroud)

在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);
Run Code Online (Sandbox Code Playgroud)

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

src中的spec.ts文件将像以前一样运行 在此输入图像描述

app spec在src的父级中,游戏规范在src文件夹中

如果你只想指定根目录,并且从那里你想要选择所有的spec文件,那么我们给出一个不同的命名约定,它不同于node_modules中的spec文件.说你的src是yourapp.componentout.spec.ts,哪些是在insideapp.componentin.spec.ts里面你可以给一个路径而不是两个目录

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

或者另一种方式遵循仅在src之外的文件的命名约定并放置

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

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

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

  require.context(directory, useSubdirectories = false, regExp = /^\.\//)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 !!!

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

  • 很好的答案!我从来没有想过在 `tests.ts` 中添加额外的上下文,我在任何地方都没有看到过相关的文档。非常感谢您发帖 (2认同)