TestCase设置功能中的Laravel 5.8宏

时间:2019-03-21 19:16:42

标签: php laravel phpunit

随着我对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



    }
}

是否有一种方法可以将这些宏分解为不同的文件,以便更容易地组织起来?

1 个答案:

答案 0 :(得分:0)

在开发另一个要注册宏的程序包时,我突然想到了这一点,并意识到可以在任何程序包中注册宏。因此,要组织此活动,您可以使自己成为一个简单的测试或声明包。在一个软件包中,您可以注册多个服务提供商,并将其设置为自动加载。

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

但是一旦这一切都完成了,您就可以简单地添加Testing/TestResponseSeviceProviderTesting/CollectionSeviceProvider等...,以便组织测试段。

您可能要考虑的另一件事是将它们分成不同的程序包。例如,我有一组turbolinks断言,仅在编写turbo link laravel应用程序时才使用。因此,我将其拆分为自己的程序包,这样就不会在不需要它的项目中增加无谓负载。

我希望能对某人有所帮助。如果您需要一个完整的例子,请给我评论,我会发表一个。