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

时间:2017-11-18 10:09:45

标签: angular

我有一个位于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

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

2 个答案:

答案 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文件将像以前一样运行 enter image description here

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'