Я столкнулся с проблемой, которую не могу исправить. Я использую 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());
Есть мысли о том, почему ресурс возвращает пустой массив?