随着我对laravel 5+(尤其是5.8)进行更多的测试,我倾向于编写自己的断言来处理乏味的操作。我目前的方法是在设置功能的基本测试用例文件中存储一堆宏。
并不完全相关,但是我引用了我自己的测试用例文件,该文件是从composer程序包中提取的,在我对其进行精炼时,它会随项目而变化。
但是,到了相当数量的宏的地步,在寻找需要更新的宏或在其附近写另一个新宏时,我开始感到痛苦。因此,我觉得重构是有条理的,但是我不确定重构的最佳方法是什么。
是否有办法巧妙地使用特征或服务提供者,甚至可以完成相同任务的管道类?
这是我的TestCase文件的一个示例
<?php
namespace Quicktools\Tests; // Not Relevant but just being pulled in
use \Exception;
use Quicktools\Model; // Same, the laravel base model except macroable
use PHPUnit\Framework\Assert;
use Illuminate\Support\Collection as BaseCollection;
use Illuminate\Foundation\Testing\TestResponse;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use \Tests\CreatesApplication;
public function setUp(): void
{
parent::setUp();
//TESTRESPONSE ASSERTIONS
//MACROS HERE (with an example for clarity)
TestResponse::macro('data', function ($key = null) {
if (!is_null($key)) {
return $this->original->getData()[$key];
}
return is_null($this->original->getData())
? null : collect($this->original->getData());
});
//COLLECTION ASSERTIONS
//MACROS HERE
//VUE COMPONENT ASSERTIONS
//MACROS HERE
//STATUS ASSERTIONS
//MACROS HERE
//AJAX/AXIOS ASSERTIONS
//MACROS HERE
}
}
是否有一种方法可以将这些宏分解为不同的文件,以便更容易地组织起来?
答案 0 :(得分:0)
在开发另一个要注册宏的程序包时,我突然想到了这一点,并意识到可以在任何程序包中注册宏。因此,要组织此活动,您可以使自己成为一个简单的测试或声明包。在一个软件包中,您可以注册多个服务提供商,并将其设置为自动加载。
我还没有测试过这个想法,但是订购对于装载目的可能很重要。假设您的数据宏正在另一个宏中使用。如果您的数据宏尚未注册,则可能会因排序而中断。
但是一旦这一切都完成了,您就可以简单地添加Testing/TestResponseSeviceProvider
和Testing/CollectionSeviceProvider
等...,以便组织测试段。
您可能要考虑的另一件事是将它们分成不同的程序包。例如,我有一组turbolinks断言,仅在编写turbo link laravel应用程序时才使用。因此,我将其拆分为自己的程序包,这样就不会在不需要它的项目中增加无谓负载。
我希望能对某人有所帮助。如果您需要一个完整的例子,请给我评论,我会发表一个。