Проблемы с конечной точкой API тестирования с Laravel Resources - PullRequest
0 голосов
/ 06 сентября 2018

Я столкнулся с проблемой, которую не могу исправить. Я использую Laravel 5.6 и пытаюсь выполнить тестовый запрос к моему API, который возвращает коллекцию ресурсов. Тем не менее, он возвращает пустой массив.

Это работает в моем приложении, просто не знаю, почему оно не работает в тесте. Мой код ниже.

Метод моего контроллера

public function index(Request $request)
{
    //
    if ($request->has('only'))
    {
        $columns = array_diff($request->query('only'), ['role']);
        $return = $request->query('only');

        return UserResource::collection(User::all($columns))->only($return);

    } else {
        return UserResource::collection(User::all());

    }

}

Мой тест

/** @test */
public function getting_all_users_unauthenticated()
{

    // Without Authentication
    $this->getJson('/api/v1/users')
        ->assertStatus(401);

    // Create User and Auth Headers
    $this->createUserWithToken();

    // With Authencation
    $this->getJson('/api/v1/users')
        ->assertOk()
        ->assertJson(
            ['id' => $this->user->id,
             'subscription_id' => $this->user->subscription_id,
             'name' => $this->user->name,
             'email' => $this->user->email,
             'active' => $this->user->active,
             'timezone' => $this->user->timezone,
             'settings' => $this->user->settings 
        ]);

}

Маршрут в api.php

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function(){
    Route::apiResources([
        'users' => 'API\UserController'
    ]);
});

Я получаю это при запуске теста

Summary of non-successful tests:

Endpoints\Users
 ✘ Getting all users unauthenticated

Unable to find JSON: 

[{
    "id": 1,
    "subscription_id": null,
    "name": "Ottilie Marvin",
    "email": "nlangosh@example.net",
    "active": 1,
    "timezone": null,
    "settings": null
}]

within response JSON:

[[
    []
]].


Failed asserting that an array has the subset Array &0 (
    'id' => 1
    'subscription_id' => null
    'name' => 'Ottilie Marvin'
    'email' => 'nlangosh@example.net'
    'active' => 1
    'timezone' => null
    'settings' => null
).
--- Expected
+++ Actual
@@ @@
         (
         )

-    [id] => 1
-    [subscription_id] => 
-    [name] => Ottilie Marvin
-    [email] => nlangosh@example.net
-    [active] => 1
-    [timezone] => 
-    [settings] => 
 )
/var/www/iosgen/iosgen_paper/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:416
/var/www/iosgen/iosgen_paper/tests/Endpoints/UsersTest.php:33

Однако я могу заставить это работать без использования Ресурса API, выполнив это в контроллере

return response()->json(User::all());

Есть мысли о том, почему ресурс возвращает пустой массив?

1 Ответ

0 голосов
/ 07 сентября 2018

Я нашел свою проблему. Следуя этой статье, я добавил некоторые функции в ресурс. https://hackernoon.com/hiding-api-fields-dynamically-laravel-5-5-82744f1dd15a

Несмотря на то, что он работает в приложении, тест возвращает пустое поле данных в ответе. Я отменил это и найду другой способ фильтрации данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...