[英]Laravel 5.8 Macros in TestCase Setup function
隨着我在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
}
}
有沒有辦法將這些宏分解為不同的文件,以便更容易地組織它們?
在開發另一個要注冊宏的程序包時,我突然想到了這一點,並意識到可以在任何程序包中注冊宏。 因此,要組織此活動,您可以使自己成為一個簡單的測試或聲明包。 在一個軟件包中,您可以注冊多個服務提供商,並將其設置為自動加載。
我沒有測試過這個想法,但是訂購對於裝載目的可能很重要。 假設您的數據宏正在另一個宏中使用。 如果您的數據宏尚未注冊,則可能會根據順序中斷。
但是,一旦這一切都完成了,您就可以簡單地添加Testing/TestResponseSeviceProvider
和Testing/CollectionSeviceProvider
等...,從而組織了測試段。
您可能要考慮的另一件事是將它們分成不同的程序包。 例如,我有一組turbolinks斷言,僅在編寫turbo link laravel應用程序時才使用。 因此,我將其拆分為自己的程序包,這樣就不會在不需要它的項目中增加無謂負載。
希望對您有所幫助。 如果您需要一個完整的例子,請給我評論,我會發表一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.