使用内部Http请求进行Laravel PHPUnit测试

时间:2018-01-15 08:33:08

标签: php laravel laravel-5 phpunit dingo-api

我是laravel的新手,我正在尝试使用phpunit命令构建PHPUnit测试。但是,测试一直在说Expected status code 200 but received 400。当我在Postman上测试相同的uri时,它的效果非常好。

当我使用phpunit命令时,request()->segment(1)将返回null。但是,使用Postman发出请求会返回request()->segment(1)的正确值,即“api”。

我正在使用dingo包来获取api请求。

任何建议或建议都将不胜感激。

谢谢。

已编辑:我发现问题是当我运行phpunit之类的命令行时,request()会将该命令识别为请求。那么,我怎么能到处走走?

这是我的测试代码

ClientTest.php

<?php

namespace Tests\Unit\Client;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ClientTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $response = $this->get('/api/v1/clients/1');

        $response->assertStatus(200);
    }

}

这是我的api路线代码

路线/ api.php

<?php

use Dingo\Api\Routing\Router;

if ( request()->segment(1) === 'api' ) {
    $apiRouter = app(Router::class);
    $apiVersion = strtolower(request()->segment(2));

    $apiRouter->version($apiVersion, function ($apiRouter) use ($apiVersion)
    {
        $pathPrefix = 'App\Http\Controllers\Api\V1';

        $apiRouter->get($apiVersion.'/clients/{id}', $pathPrefix.'\Client\ClientController@index');

    });

}

0 个答案:

没有答案