测试用例设置函数中的 Laravel 5.8 宏



随着我在 laravel 5+ 中更多地进行测试,特别是在 5.8 中,我倾向于编写自己的断言来处理乏味的操作。我目前的方法是在设置函数中将一堆宏存储在我的基本测试用例文件中。

不完全相关,但我引用了我自己的测试用例文件,我从作曲家包中提取该文件,并且在我完善它时从一个项目到另一个项目。

然而,它已经到了有相当数量的宏的地步,在寻找需要更新的宏或在其附近编写另一个新宏时,我开始感到痛苦。所以我觉得重构是有序的,但我不确定重构的最佳方式是什么。

如果巧妙地使用特征或服务提供程序,甚至是可以完成相同事情的管道类,有没有办法?

这是我的测试用例文件的示例


<?php
namespace QuicktoolsTests; // Not Relevant but just being pulled in
use Exception;
use QuicktoolsModel; // Same, the laravel base model except macroable
use PHPUnitFrameworkAssert;
use IlluminateSupportCollection as BaseCollection;
use IlluminateFoundationTestingTestResponse;
use IlluminateFoundationTestingTestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use TestsCreatesApplication;

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

}
}

有没有办法将这些宏分解成不同的文件,以便更容易组织?

我在开发另一个包时遇到了这个问题,我正在注册一个宏,并意识到你可以在任何包中注册宏。因此,为了组织它,您可以为自己制作一个简单的测试或断言包。在一个包中,您可以注册多个服务提供商并将 up 设置为自动加载。

我还没有测试过这个想法,但订购对于加载目的可能变得很重要。例如,假设您的数据宏正在另一个宏中使用。如果尚未注册数据宏,则可能会根据顺序中断。

但是一旦这一切都连接起来,你也许可以简单地添加一个Testing/TestResponseSeviceProviderTesting/CollectionSeviceProvider等等......所以你有组织的测试段。

您可能需要考虑的另一件事是将它们拆分为不同的包。例如,我有一组涡轮链接断言,我只在编写涡轮链接 laravel应用程序时使用。所以我把它分成它自己的包,这样我就不会给一个不需要它的项目增加自重。

我希望这对某人有所帮助。如果您需要完整的示例,请给我留言,我会发布一个。

最新更新