Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 测试用例设置功能中的Laravel 5.8宏_Php_Laravel_Phpunit - Fatal编程技术网

Php 测试用例设置功能中的Laravel 5.8宏

Php 测试用例设置功能中的Laravel 5.8宏,php,laravel,phpunit,Php,Laravel,Phpunit,随着我对Laravel5+测试的深入,特别是在5.8中,我倾向于编写自己的断言来处理繁琐的操作。我目前的方法是在setup函数中的基本Testcase文件中存储一组宏 不完全相关,但我引用了我自己的测试用例文件,该文件是我从composer包中提取的,并且随着我对它的细化,它会从一个项目延伸到另一个项目 然而,当我开始寻找需要更新的宏或者在它附近写另一个新的宏时,我开始感到痛苦。所以我觉得重构是正确的,但我不确定重构的最佳方式是什么 如果巧妙地使用traits或服务提供者,甚至是管道类,有没有一

随着我对Laravel5+测试的深入,特别是在5.8中,我倾向于编写自己的断言来处理繁琐的操作。我目前的方法是在setup函数中的基本Testcase文件中存储一组宏

不完全相关,但我引用了我自己的测试用例文件,该文件是我从composer包中提取的,并且随着我对它的细化,它会从一个项目延伸到另一个项目

然而,当我开始寻找需要更新的宏或者在它附近写另一个新的宏时,我开始感到痛苦。所以我觉得重构是正确的,但我不确定重构的最佳方式是什么

如果巧妙地使用traits或服务提供者,甚至是管道类,有没有一种方法可以完成同样的事情

下面是我的测试用例文件的一个示例


<?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/testresponseeviceprovider
Testing/CollectionSeviceProvider
等。。。因此,您已经组织了测试段

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

我希望这能帮助别人。如果你需要一个完整的例子,请给我留言,我会发布一个