如何在laravel的特性测试中重复相同的测试

lnlaulya  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(114)

这是我的功能测试

class CreateImageTest extends TestCase
{

    private static function headers(){
        ....
    }

    /**
     * @test
     * 
     */
    public function no_api_key_404()
    {
        ......
    }

    /**
     * @test
     * 
     */
    public function not_logged_in_401()
    {
        ......
    }

    /**
     * @test
     * 
     */
    public function empty_body_422()
    {
        ....
    }
}

我总是从中间件测试开始,就像你在上面看到的那样(auth和API密钥中间件)。我将使用相同的测试过程来测试具有类似中间件的端点(有很多中间件)。我如何才能做到这一点而不显得多余呢?我想为重复测试模式创建一个trait,但我不知道如何做到这一点。

rryofs0p

rryofs0p1#

我认为你应该能够通过引入一个AbstractTestCase文件来实现你想要的,这个文件可以包含你所有重复的中间件测试,并且可以被需要它的测试类扩展。
你的抽象类可以看起来像这样:

<?php

abstract class AbstractMiddlewareTestCase extends TestCase
{
    protected array $headers = [];

    public function no_api_key_404()
    {
        $this->get('your_api_url', $this->headers)
            ->seeStatusCode(404);
    }

    // Add any other shared tests here
}

然后你可以从你的常规测试文件扩展如下:

<?php

class CreateImageTest extends AbstractMiddlewareTestCase
{
    use ApiKeyTrait;

    public function create_image() {
        $this->get('your_api_url', $this->headers)
            ->seeStatusCode(200);
    }

}

此外,您可以利用Traits来满足多种类型的中间件。即,如果您的创建映像端点是API密钥授权的,则您可以拥有ApiKeyTrait,如下所示:

<?php

trait ApiKeyTrait
{
    public function setUp(): void
    {
        parent::setUp();

        $this->headers = [
            'X-API-KEY' => 'yourKey',
        ];
    }
}

相关问题