我有一个位于NgModule
文件夹之外的/src
的Angular CLI项目(最终这个NgModule将被打包为npm模块,但是现在我只是把它留在{{{}之外1}})。
我正在尝试为此NgModule编写单元测试,但/src
似乎没有在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$/);
我还尝试在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.
的{{1}}属性中添加我的NgModule路径:
include
但没有成功。有什么想法吗?
答案 0 :(得分:6)
在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文件将像以前一样运行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);
或另一种方式遵循仅在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
答案 1 :(得分:0)
以下命令会有所帮助
ng test --include='src/app/modulefolder/**/*.spec.ts'