Laravel 5.5 API-модуль тестирования - PullRequest
0 голосов
/ 07 мая 2018

У меня проблема с модульным тестированием API laravel, это мои конфиги и простой код, но я получаю "Ожидаемый код состояния 201, но получено 500". Но с почтальоном все ок, почему ??? помогите пожалуйста config1 config2 тест контроллер результат

В RegisterController есть особенность, называемая RegistersUsers, и в ней есть метод register ()

Route::post('register', 'Auth\RegisterController@register');

он вызывает метод register (), а вызов метода register зарегистрирован ()

config 1 - config / database.php

   'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'database' => ':memory:',
        'prefix' => '',
    ],

config 2 - phpunit.xml

   <php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="DB_CONNECTION" value="sqlite"/>
</php>

тест

public function testRegisterSuccessfully()
{
    $register = [
        'name' => 'UserTest',
        'email' => 'user2@test.com',
        'password' => 'testpass',
        'password_confirmation' => 'testpass'
    ];

    $this->json('POST', 'api/register', $register)
        ->assertStatus(201)
        ->assertJsonStructure([
            'token',
            'user' => [
                'id',
                'name',
                'email',
                'created_at',
                'updated_at'
            ]
        ]);
 }

метод управления

public function registered(Request $request)
{
    $user = $this->guard()->user();
    $success['token'] = $user->createToken('WAI')->accessToken;
    $success['user'] = $user;
    return response()->json($success, 201);
}

результат

 developer@developer-v3:/var/www/WAI$ composer test
 > vendor/bin/phpunit
 PHPUnit 6.5.8 by Sebastian Bergmann and contributors.

  ..F..                                                               5 /   5 (100%)

Time: 3.78 seconds, Memory: 20.00MB

 There was 1 failure:

1) Tests\Feature\Auth\RegisterControllerTest::testRegisterSuccessfully
Expected status code 201 but received 500.
Failed asserting that false is true.

/var/www/WAI/vendor/laravel/framework/src/Illuminate/Foundation/Testing         /TestResponse.php:78
/var/www/WAI/tests/Feature/Auth/RegisterControllerTest.php:26

FAILURES!
Tests: 5, Assertions: 6, Failures: 1.
Script vendor/bin/phpunit handling the test event returned with error code   1

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Попробуйте использовать $this->withoutExceptionHandling() в верхней части теста. Это помешает Laravel разрешить исключение в код состояния HTTP и предложит вам более подробное объяснение ошибки.

0 голосов
/ 07 мая 2018

Является ли client отношениями? Если это так, вы должны вызывать его с круглыми скобками: client() - отношения являются функциями в модели.

0 голосов
/ 07 мая 2018

Полагаю, что маршрут 'api/register' связан с методом registered.

Вы отправляете переменную $register с пользовательскими данными , но вы ее не используете.

Попробуйте с:

В тесте

public function testRegisterSuccessfully()
{
    $register = [
        'name' => 'UserTest',
        'email' => 'user2@test.com',
        'password' => 'testpass',
        'password_confirmation' => 'testpass'
    ];

    $this->json('POST', 'api/register', $register)
        ->assertStatus(201)
        ->assertJsonStructure([
            'token',
            'user' => [
                'id',
                'name',
                'email',
                'created_at',
                'updated_at'
            ]
        ]);
 }

В контроллере

public function register(Request $request)
{
    $user = User::create($request->all());
    $success = $this->registered($user);

    return response()->json($success, 201);
}

public function registered($user)
{
    $success['token'] = $user->createToken('WAI')->accessToken;
    $success['user'] = $user;
    return $success;
}

ВАЖНО
Если вы используете Laravel Passport, не забудьте добавить черту HasApiTokens в модель.

Модель пользователя

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...