У меня есть работающее приложение api
.
Мне необходимо написать тест, который решил использовать тест phpunit laravel
.Это простое приложение позволяет только аутентифицированным пользователи могут store
, update
или delete
book
.Все остальные (прошедшие проверку подлинности или нет) могут получить список всех books
или просмотреть сведения об одном book
.
Для моего books
теста я написал тест, который сначала создает user
затем случайный token
для пользователя.Затем токен передается с помощью withHeaders
при публикации новой записи книги
class BooksTest extends TestCase
{
public function test_onlyAuthenticatedUserCanAddBookSuccessfully()
{
$user = factory(User::class)->create();
$token = str_random(10);
$book = factory(Book::class)->create();
$response = $this->withHeaders(['Authorization' => "Bearer $token"])
->json('POST', '/api/books', [
'title' => 'book post',
'author' => 'post author'
]);
$response->assertStatus(201);
}
}
Здесь я использую Laravel по умолчанию 5.6 UserFactory
и мой собственный BookFactory
$factory->define(Book::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'author' => $faker->name,
'user_id' => 1
];
});
$factory->define(Rating::class, function (Faker $faker) {
return [
'user_id' => 1,
'book_id' => mt_rand(1, 2),
'rating' => mt_rand(1, 5)
];
});
Когда я запускаю тест, он не проходит, и я получаю 401
вместо 200
, что означает, что пользователь не авторизован.
У меня такое ощущение, что я, вероятно, неправильно установил $user
в своем тестебудет использоваться в течение POST
, но я не уверен и действительно нуждаюсь в помощи, чтобы понять это правильно.