В настоящее время я учусь писать тест PHPUnit с помощью приложения laravel и уже несколько дней биться в кирпичную стену.Мой тест состоял в том, чтобы позволить только аутентифицированным пользователям обновлять запись книги, если идентификатор пользователя совпадает с идентификатором пользователя книги.
public function test_onlyAuthenticatedUserCanUpdateBookSuccessfully()
{
$user = factory(User::class)->create();
Passport::actingAs($user);
$book = factory(Book::class)->create();
dd($user, $book);
// $response = $this->json('PUT', '/api/books/'.$book->id, [
// 'id' => $book->id,
// 'title' => 'Updated book title',
// 'author'=> 'New Guy'
// ]);
// $response->assertStatus(201);
}
Но изначально я получил ошибку 403, и во время устранения неполадок я заметил из дамповданные о том, что идентификатор созданного пользователя не совпадает с идентификатором user_id книги.
// Newly created user
#original: array:7 [
"name" => "Prof. Norwood Erdman"
"email" => "ihoeger@example.com"
"updated_at" => "2018-10-03 14:11:20"
"created_at" => "2018-10-03 14:11:20"
"id" => 2
]
// Newly created book
#attributes: array:6 [
"title" => "Quasi laudantium enim quas omnis."
"author" => "Mr. Jayson Roob"
"user_id" => 1
"updated_at" => "2018-10-03 14:11:20"
"created_at" => "2018-10-03 14:11:20"
"id" => 3
]
Просматривая мой код, я обнаружил, что каждый раз при создании книги для user_id будет задано значение 1, поскольку мой BooksFactory используетжестко закодированное значение user_id = 1
.
$factory->define(Book::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'author' => $faker->name,
'user_id' => 1
];
});
Как мне написать свой код, чтобы в моем тесте при создании книги идентификатор аутентифицированного пользователя назначался в качестве идентификатора пользователя книги?Я думаю, что это исправит тест.Я использую базу данных sqlite памяти для тестирования, а не mysql.