### validation check
BookReservationTest.php
public function test_a_title_is_require(){ $this->withoutExceptionHandling(); $response = $this->post('/books', [ 'title' => '', 'author' => 'victor', ]); $this->assertSessionHasErrors('title'); }
BooksController.php
public function store(){ $data = request()->validate([ 'title' => 'required', ]); Book::create($data); }
BookReservationTest.php
public function test_a_title_is_require(){ $response = $this->post('/books', [ 'title' => '', 'author' => 'victor', ]); $response->assertSessionHasErrors('title'); }
$ phpunit –filter test_a_title_is_require
PHPUnit 8.5.0 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 220 ms, Memory: 20.00 MB
OK (1 test, 2 assertions)
titleと同様にauthorもテストする
public function test_a_author_is_require(){ $response = $this->post('/books', [ 'title' => 'title', 'author' => '', ]); $response->assertSessionHasErrors('author'); }
### Update method check
public function test_a_book_can_be_updated(){ $this->post('/books', [ 'title' => 'Cool Title', 'author' => 'Victor', ]); $response = $this->patch('/books',[ 'title' => 'New Title', 'author' => 'New Author', ]); $this->assertEquals('New Titile', Book::first()->title); $this->assertEquals('New Author', Book::first()->author); }
$ phpunit –filter test_a_book_can_be_updated
1) Tests\Feature\BookReservationTest::test_a_book_can_be_updated
Failed asserting that two strings are equal.
— Expected
+++ Actual
@@ @@
-‘New Titile’
+’Cool Title’
route
Route::patch('/books/{book}', 'BooksController@update');
public function test_a_book_can_be_updated(){ $this->withoutExceptionHandling(); $this->post('/books', [ 'title' => 'Cool Title', 'author' => 'Victor' ]); $book = Book::first(); $response = $this->patch('/books/'. $book->id, [ 'title' => 'New Title', 'author' => 'New Author' ]); $this->assertEquals('New Title', Book::first()->title); $this->assertEquals('New Author', Book::first()->author); }
public function update(Book $book){ $data = request()->validate([ 'title' => 'required', 'author' => 'required', ]); $book->update($data); }
リファクタリング
public function store(){; Book::create($this->validateRequest()); } public function update(Book $book){ $book->update($this->validateRequest()); } protected function validateRequest(){ return request()->validate([ 'title' => 'required', 'author' => 'required', ]); }
$ git add .
$ git commit -m “php unit”
Laravelの書き方に沿ってます。こりゃフレームワークの書き方がわからずにテスト工程をコントロールするのは若干無理がありますな。