运行一个测试文件


138

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


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




Answers:


262

我发现Jasmine允许您为describeit方法添加前缀f(以获取焦点?)。因此,fdescribefit。如果您使用其中任何一种,业力将仅运行相关的测试。因此,要集中当前文件,您可以将顶层文件describe更改为fdescribe。为我的目的工作。


9
传奇的答案
danday74 '18

2
不能相信如此重要的功能并不更加明显和直接。
Ash Ash

10
它可以工作,但是不是理想的,因为您需要更改源代码,并且最终可以在源代码管理中签入修改后的代码。
Marco Altieri

4
请尽可能添加指向官方文档的链接
jgpATs2w

我一直在搜索,太棒了
卡洛斯E

26

值得一提的是,您可以禁用特定测试,而无需通过xdescribe和发表评论xit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

正如有人已经说过,如果您想专注于某些测试fdescribefit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

这些天可以通过include选件实现。 https://angular.io/cli/test#options

这是一个全局匹配,因此例如:

ng test --include='**/someFolder/*.spec.ts'

在8.1.0 发行说明中找不到它,但是@Swoox在下面提到的是cli版本之后的功能8.1.0。感谢您弄清楚这一点。


1
这似乎是最近的更新。可能希望包括所需的版本。需要CLI 8.1。
Swoox

似乎要在v9.1中删除:(
rmcsharry

2
我刚刚在CLI v9.1.0中对此进行了测试,它可以完美运行。
Sajjan Singh

9

我发现它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文档


Angular 9-它似乎已被删除
rmcsharry

不,它仍然可以在NG 9
tephyr

6

您可以转到src/test.ts并可以更改以下行:

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

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

在此处输入图片说明


1
严格来说,这听起来是最正确的答案,尽管有关如何执行此操作的大多数问题都可以通过使用fit和fdescribe解决。在Karma中存在一个git问题可以更轻松地完成此任务:github.com/karma-runner/karma/issues/1507。理想情况下,尽管不是简单地,我们可以配置Karma,以便我们可以更改一个测试,然后只需在浏览器中单击它以使用更新重新运行它。
南瓜thehead



0

您必须必须走,src/test.ts并且可以更改以下行号代码18:

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

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

在此处输入图片说明


-3

如果将spec文件指定为参数,则可以使用。

例如:

ng test foo.spec.ts

希望这可以帮助。


4
您可以指定使用哪个版本?无法使用1.7.x
FrEaKmAn

4
它对我也不起作用。但是我修改了它以使其与spec文件路径之前的--main选项一起使用。我使用了带有正斜杠的绝对路径。尚未尝试过相对路径。使用Angular6。不知道这是否是最佳解决方案,但它似乎对我有用。
user2367418 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.