测试依赖
有时,测试需要在执行之前满足某些先决条件或事件,否则它们将无法成功。例如,只有在首先验证可以创建帐户后,您才能验证用户是否能够修改其帐户。
为了解决此问题,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); // a21 var_dump($testB); // b22 var_dump($testC); // c23})->depends('a', 'b', 'c');
虽然测试依赖项并不常见,但它们对于优化测试和最大程度地减少重复创建资源的需要很有用。在下一章中,我们将探讨如何创建插件:创建插件