我用Angular-CLI构建了Angular2项目(beta 20)。
是否有一种方法仅针对一个选定的规范文件运行测试?
我曾经有一个基于Angular2的项目,我可以手动向jasmine文件添加规格。但我不知道如何在因果测试之外设置这个,也不知道如何用Angular-CLI构建将因果测试限制在特定的文件上。
我用Angular-CLI构建了Angular2项目(beta 20)。
是否有一种方法仅针对一个选定的规范文件运行测试?
我曾经有一个基于Angular2的项目,我可以手动向jasmine文件添加规格。但我不知道如何在因果测试之外设置这个,也不知道如何用Angular-CLI构建将因果测试限制在特定的文件上。
当前回答
这在任何情况下都对我有效:
ng test --include='**/dealer.service.spec.ts'
然而,我通常得到“TypeError:不能读取属性'ngModule'的null”:
ng test --main src/app/services/dealer.service.spec.ts
@angular/cli 10.0.4版本
其他回答
你的每一个。spec。Ts文件将其所有测试分组在描述块中,如下所示:
description ('SomeComponent',() =>{…}
你可以很容易地只运行这一个块,通过在describe函数名前加上f:
fdescribe('SomeComponent',() =>{…}
如果你有这样的函数,就不会运行其他描述块。 顺便说一句。你可以用it => fit做类似的事情,还有一个“黑名单”版本- x。所以:
Fdescribe和fit只会导致以这种方式标记的函数运行 Xdescribe和xit会导致以这种方式标记的函数以外的所有函数运行
如果您在一个使用monorepo架构的项目中工作,那么您必须在命令行中将项目名称写在脚本后。 例如:
ng test MyProject1Name -- --include='myComponent.component.spec.ts'
这在Angular 7中为我工作。它基于ng命令的——main选项。我不确定这个选项是否没有记录,是否可能会更改,但它适合我。我在包里放了条线。Json文件在脚本部分。在这里,我使用ng test命令的——main选项指定了.spec文件的路径。ts文件,我想执行。例如
"test 1": "ng test --main E:/WebRxAngularClient/src/app/test/shared/my-date-utils.spec.ts",
您可以像运行任何此类脚本一样运行该脚本。我通过点击npm部分的“test 1”在Webstorm中运行它。
用,包括
这是一种包含的工作
ng test --include src/app/path-to-component/path-component.component.spec.ts
我试过——主要,但它显示所有失败的结果,而它不是。main会改变主测试。ts文件。
如果你想控制从命令行中选择哪些文件,我在Angular 7中做到了这一点。
总之,你需要安装@angular-devkit/build-angular:browser,然后创建一个自定义webpack插件来传递测试文件regex。例如:
角。Json -更改@angular-devkit/build-angular:browser中的测试构建器,并设置一个自定义配置文件:
...
"test": {
"builder": "@angular-builders/custom-webpack:browser",
"options": {
"customWebpackConfig": {
"path": "./extra-webpack.config.js"
},
...
Extra-webpack.config.js -创建一个webpack配置,从命令行读取regex:
const webpack = require('webpack');
const FILTER = process.env.KARMA_FILTER;
let KARMA_SPEC_FILTER = '/.spec.ts$/';
if (FILTER) {
KARMA_SPEC_FILTER = `/${FILTER}.spec.ts$/`;
}
module.exports = {
plugins: [new webpack.DefinePlugin({KARMA_SPEC_FILTER})]
}
测试。编辑规范
...
// Then we find all the tests.
declare const KARMA_CONTEXT_SPEC: any;
const context = require.context('./', true, KARMA_CONTEXT_SPEC);
然后使用如下方法覆盖默认值:
KARMA_FILTER='somefile-.*\.spec\.ts$' npm run test
我在这里记录了背景故事,提前为类型和错误链接道歉。感谢@Aish-Anu上面的回答,为我指明了正确的方向。