测试依赖

有时,测试需要在执行之前满足某些先决条件或事件,否则它们将无法成功。例如,只有在首先验证可以创建帐户后,您才能验证用户是否能够修改其帐户。

为了解决此问题,Pest 提供了 depends() 方法,该方法允许“子”测试指定它依赖于一个或多个“父”测试。

1test('parent', function () {
2 expect(true)->toBeTrue();
3});
4 
5test('child', function () {
6 expect(false)->toBeFalse();
7})->depends('parent');

在此示例中,一旦 parent 测试成功完成,child 测试将被触发。

如果 parent 测试失败,则 child 测试将被跳过,并在测试结果中显示一条信息性消息。

1test('parent', function () {
2 expect(true)->toBeFalse();
3});
4 
5test('child', function () {
6 expect(false)->toBeFalse();
7})->depends('parent');

以上示例产生以下输出

务必记住,it() 函数默认情况下会在测试前加上“it”。因此,当通过 depends() 方法引用测试名称时,您应该包含“it ”前缀。

1it('is the parent', function () {
2 expect(true)->toBeTrue();
3});
4 
5test('child', function () {
6 expect(false)->toBeFalse();
7})->depends('it is the parent');

结果是

父测试甚至可以提供返回值,这些返回值可以作为参数在 child 测试中访问。

1test('parent', function () {
2 expect(true)->toBeTrue();
3 
4 return 'from parent';
5});
6 
7test('child', function ($parentValue) {
8 var_dump($parentValue); // from parent
9 
10 expect($parentValue)->toBe('from parent');
11})->depends('parent');

还可以向测试添加多个依赖项。但是,所有父测试都必须通过,并且每个测试返回的值将作为函数参数按指定的依赖项顺序提供。

1test('a', function () {
2 expect(true)->toBeTrue();
3 
4 return 'a';
5});
6 
7test('b', function () {
8 expect(true)->toBeTrue();
9 
10 return 'b';
11});
12 
13test('c', function () {
14 expect(true)->toBeTrue();
15 
16 return 'c';
17});
18 
19test('d', function ($testA, $testC, $testB) {
20 var_dump($testA); // a
21 var_dump($testB); // b
22 var_dump($testC); // c
23})->depends('a', 'b', 'c');

虽然测试依赖项并不常见,但它们对于优化测试和最大程度地减少重复创建资源的需要很有用。在下一章中,我们将探讨如何创建插件:创建插件