是否有一种方法可以为单个文件而不是整个测试套件运行ng test ?理想情况下,我希望在编辑文件时获得尽可能快的反馈循环,但karma在每次保存时执行整个套件,当您构建足够大的测试套件时,这有点慢。


这与如何使用angular-cli只执行一个测试规范不同,因为那个问题是关于运行一个单独的规范。这是关于运行一个单独的文件。解决方案涉及相同的Jasmine规范特性,但问题的性质略有不同。


当前回答

仅适用于JetBrains WebStorm用户

我没有安装ng,所以不能运行ng测试…从命令行。我也不能安装它,因为它可能会把我现有代码库的Angular版本搞砸。我使用的是JetBrains WebStorm IDE,在其中你可以右键单击规格文件并运行测试。

其他回答

我发现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文章,提供了额外的周到解决方案。

你必须去src/test。Ts和可以更改以下行号代码18:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

to

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

Visual Studio代码扩展

最简单的方法是使用vcode -test-explorer扩展及其子angular-karma-test-explorer和jasmine-test-adapter,如果你想,你会得到一个当前测试的列表,一个接一个地运行:

这和我回答这个问题时的答案是一样的,还有更多细节。


更新DEC/2021: Angular Karma Test Explorer已弃用,请考虑使用Karma Test Explorer

如果将规范文件指定为参数,则有效。

例如:

ng test foo.spec.ts

你可以访问src/test。Ts和可以更改以下行:

Const context = require.context('。/', true, /\.spec\.ts$/);

to

Const context = require.context('。/”,的确,/ * * yourcomponent.component * * \ .spec \ .ts /美元);