是否有一种方法可以为单个文件而不是整个测试套件运行ng test ?理想情况下,我希望在编辑文件时获得尽可能快的反馈循环,但karma在每次保存时执行整个套件,当您构建足够大的测试套件时,这有点慢。
这与如何使用angular-cli只执行一个测试规范不同,因为那个问题是关于运行一个单独的规范。这是关于运行一个单独的文件。解决方案涉及相同的Jasmine规范特性,但问题的性质略有不同。
是否有一种方法可以为单个文件而不是整个测试套件运行ng test ?理想情况下,我希望在编辑文件时获得尽可能快的反馈循环,但karma在每次保存时执行整个套件,当您构建足够大的测试套件时,这有点慢。
这与如何使用angular-cli只执行一个测试规范不同,因为那个问题是关于运行一个单独的规范。这是关于运行一个单独的文件。解决方案涉及相同的Jasmine规范特性,但问题的性质略有不同。
当前回答
我发现ng test有一个额外的选项——include,你可以使用它来对单个文件或特定目录或一堆文件运行测试:
// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts
// directory or bunch of files
npm run test -- --include src/app/components
Ng cli文档
其他回答
这可以通过include选项来实现。 https://angular.io/cli/test#options
这是一个glob匹配,举个例子:
ng test --include='**/someFolder/*.spec.ts'
我在8.1.0的发布说明中找不到它,但是@Swoox在下面提到这是cli 8.1.0版本之后的一个特性。谢谢你想出来了。
我一直在寻找答案。你的问题帮了我大忙。但是,有一点是模棱两可的。特别是,如果您执行下面的CLI命令。
npm run test -- --include src/app/component/your.component.spec.ts
它将运行单个测试文件,但在运行测试后,测试浏览器将立即关闭,由于缺少监视标志,您无法查看测试文件。因此,您必须将监视标志作为真值提供。我发现下面的CLI命令可以很好地使用watch标志。
ng test --watch=true "--include" "src/app/components/your.component.spec.ts"
值得一提的是,您可以通过xdescribe和xit禁用特定的测试而无需注释
xdescribe('Hello world', () => {
xit('says hello', () => {
expect(helloWorld())
.toEqual('Hello world!');
});
});
就像有人说过的,如果你想专注于某个测试,那么就用fdescribe和fit
fdescribe('Hello world', () => {
fit('says hello', () => {
expect(helloWorld())
.toEqual('Hello world!');
});
});
我发现Jasmine允许您为describe加上前缀,它使用f(表示焦点)方法:fdescribe和fit。如果使用其中之一,Karma将只运行相关测试。要关注当前文件,只需将顶层描述更改为fdescribe。如果您在2.1版本之前使用Jasmine,重点关键字是:iit和ddescribe。
下面的示例代码只运行第一个测试:
// Jasmine versions >/=2.1 use 'fdescribe'; versions <2.1 use 'ddescribe'
fdescribe('MySpec1', function () {
it('should do something', function () {
// ...
});
});
describe('MyOtherSpec', function () {
it('should do something else', function () {
// ...
});
});
这里是Jasmine关于聚焦规格的文档,这里是一篇相关的SO文章,提供了额外的周到解决方案。
为什么要这么难?
运行ng测试 打开控制台中显示的链接:
在右上角,点击Debug:
点击你想单独运行的测试:
要重新运行测试,请刷新浏览器窗口(例如使用F5)。