簡體   English   中英

TestCase設置功能中的Laravel 5.8宏

[英]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/TestResponseSeviceProviderTesting/CollectionSeviceProvider等...,從而組織了測試段。

您可能要考慮的另一件事是將它們分成不同的程序包。 例如,我有一組turbolinks斷言,僅在編寫turbo link laravel應用程序時才使用。 因此,我將其拆分為自己的程序包,這樣就不會在不需要它的項目中增加無謂負載。

希望對您有所幫助。 如果您需要一個完整的例子,請給我評論,我會發表一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM