如何对 Angular 应用程序的子模块的所有组件执行 ng 测试

How can I execute ng test for all components of sub modul of Angular app

我有我的 angular 应用程序,声明如下:

app.module.ts

export class AppModule {}

为此我可以 运行 使用 ng test MyApp

进行测试

在这个应用程序中,我有多个模块,声明如下:

我的-one.module.ts/我的-other.module.ts

export class MyOneModule {}

export class MyOtherModule {}

这些是在 AppModule 中导入的。

我怎样才能做 ng test MyOneModule / ng test MyOtherModule 之类的事情,我想 运行 只测试 运行 中的所有组件 "sub module" 而不是应用程序中的所有测试?

我无法在 official docu 或此处的 Whosebug 中找到信息。有可能吗?

您可以在网上找到一些资源,such as this one,它解释了如何将文件 grep 到 运行 只有它们。

我还记得一位同事 运行 从 intelliJ 对单个文件进行测试,并且有一个命令行参数,但我完全不记得了。

最后,您还可以在测试中使用 fdescribe/xdescribefit/xit 来仅 运行 那些。

我最终使用了这个解决方法:

test.ts我改路径:

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

const context: any = require.context('./app/modules/my-one-module', true, /\.spec\.ts$/);

const context: any = require.context('./app/modules/my-other-module', true, /\.spec\.ts$/);

这会导致 ng test 仅在定义的目录(及其子目录)中执行测试。

不理想,因为我不喜欢对 checked-in 文件进行更改,这些文件并不意味着要提交,但它可以完成工作。

您可以单独测试每个模块,而无需更改任何代码。

为 moduleone 复制 test.ts 和 tsconfig.spec.json 文件并重命名如下;

test.moduleone.ts

tsconfig.moduleone.spec.json

在tsconfig.moduleone.spec.json

中找到test.ts并将其更改为test.moduleone.ts
"files": [
   "test.moduleone.ts"
]

在 test.moduleone.ts;

中查找并更改路径为 moduleone 路径
const context: any = require.context('./app/moduleone', true, /\.spec\.ts$/);

运行 像这样测试 moduleone;

ng test --main src/test.moduleone.ts --ts-config src/tsconfig.moduleone.spec.json

您可以将每个模块的脚本添加到 package.json

中的脚本部分
"scripts":{
   "moduleone_tests":"ng test --main src/test.moduleone.ts --ts-config src/tsconfig.moduleone.spec.json"
}

所以你可以用一个简单的命令测试每个模块,比如

npm run moduleone_tests