Php 测试用例设置功能中的Laravel 5.8宏
随着我对Laravel5+测试的深入,特别是在5.8中,我倾向于编写自己的断言来处理繁琐的操作。我目前的方法是在setup函数中的基本Testcase文件中存储一组宏 不完全相关,但我引用了我自己的测试用例文件,该文件是我从composer包中提取的,并且随着我对它的细化,它会从一个项目延伸到另一个项目 然而,当我开始寻找需要更新的宏或者在它附近写另一个新的宏时,我开始感到痛苦。所以我觉得重构是正确的,但我不确定重构的最佳方式是什么 如果巧妙地使用traits或服务提供者,甚至是管道类,有没有一种方法可以完成同样的事情 下面是我的测试用例文件的一个示例Php 测试用例设置功能中的Laravel 5.8宏,php,laravel,phpunit,Php,Laravel,Phpunit,随着我对Laravel5+测试的深入,特别是在5.8中,我倾向于编写自己的断言来处理繁琐的操作。我目前的方法是在setup函数中的基本Testcase文件中存储一组宏 不完全相关,但我引用了我自己的测试用例文件,该文件是我从composer包中提取的,并且随着我对它的细化,它会从一个项目延伸到另一个项目 然而,当我开始寻找需要更新的宏或者在它附近写另一个新的宏时,我开始感到痛苦。所以我觉得重构是正确的,但我不确定重构的最佳方式是什么 如果巧妙地使用traits或服务提供者,甚至是管道类,有没有一
<?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
}
}
我在开发另一个软件包时遇到了这个想法,当时我正在注册一个宏,并意识到可以在任何软件包中注册宏。因此,为了组织这项工作,您可以让自己成为一个简单的测试或断言包。在软件包中,您可以注册多个服务提供商,并将设置为自动加载
我还没有测试过这个想法,但是为了加载的目的,排序可能变得很重要。例如,假设您的数据宏正在另一个宏中使用。如果您的数据宏尚未注册,它可能会根据顺序中断
但是一旦这些都连接好了,您就可以简单地添加一个Testing/testresponseeviceprovider
和Testing/CollectionSeviceProvider
等。。。因此,您已经组织了测试段
你可能要考虑的另一件事是把它们分成不同的包。例如,我有一组turbolinks断言,我只在编写turbolinks laravel应用程序时使用这些断言。所以我把它分成了自己的包,这样我就不会给一个不需要它的项目增加负担
我希望这能帮助别人。如果你需要一个完整的例子,请给我留言,我会发布一个