【问题标题】:Laravel 5.8 Macros in TestCase Setup function测试用例设置功能中的 Laravel 5.8 宏
【发布时间】:2019-05-15 07:02:39
【问题描述】:

随着我越来越多地在 laravel 5+ 中进行测试,尤其是在 5.8 中,我倾向于编写自己的断言来处理繁琐的操作。我目前的方法是在 setup 函数的 Base Testcase 文件中存储一堆宏。

不完全相关,但我引用了我自己的测试用例文件,该文件是从 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



    }
}

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

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    我在开发另一个包时偶然发现了这一点,我在其中注册了一个宏,并意识到您可以在任何包中注册宏。因此,为了组织它,您可以让自己成为一个简单的测试或断言包。在一个包中,您可以注册多个服务提供商并将其设置为自动加载。

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

    但是一旦这些都连接起来,您可以简单地添加Testing/TestResponseSeviceProviderTesting/CollectionSeviceProvider 等...这样您就可以组织测试段。

    您可能要考虑的另一件事是将它们分成不同的包。例如,我有一组 turbolinks 断言,我只在编写 turbo links laravel 应用程序时使用它们。所以我把它分成了它自己的包,所以我不会给不需要它的项目增加自重。

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

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2019-12-14
      • 2019-03-15
      • 1970-01-01
      • 2016-08-10
      相关资源
      最近更新 更多