carbonでset attributeを使うときは、modelでsetDobAttributeとし、testメソッドでは、$this->assertInstanceOf(Carbon::class, … と書く
## make:test
$ php artisan make:test AuthorManagementTest
テスト駆動開発でも、DBのリレーション関係に沿って開発するのは変わらない
use RefreshDatabase; public function test_an_author_can_be_created(){ $this->withoutExceptionHandling(); $this->post('/author', [ 'name' => 'Author Name', 'dob' => '05/14/1988' ]); $this->assertCount(1, Author::all()); }
$ phpunit –filter test_an_author_can_be_created
Route::post('/authors', 'AuthorsController@store');
$ php artisan make:controller AuthorsController
AuthorsController.php
public function store(){ Author::create(request()->only([ 'name','dob' ])); }
$ php artisan make:model Author -m
Athor.php
class Author extends Model { // protected $fillable = ['name', 'dob']; }
migration file
Schema::create('authors', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->timestamp('dob') $table->timestamps(); });
use Carbon\Carbon; use App\Author; public function test_an_author_can_be_created(){ $this->withoutExceptionHandling(); $this->post('/author', [ 'name' => 'Author Name', 'dob' => '05/14/1988' ]); $author = Author::call(); $this->assertCount(1, $author); $this->assertInstanceOf(Carbon::class, $author->first()->dob); }
$ phpunit –filter test_an_author_can_be_created
Failed asserting that ’05/14/1988′ is an instance of class “Carbon\Carbon”.
Author.php
protected $dates = ['dob']; public function setDobAttribute($dob){ $this->attributes['dob'] = Carbon::parse($dob); }
public function test_an_author_can_be_created(){ $this->withoutExceptionHandling(); $this->post('/authors', [ 'name' => 'Author Name', 'dob' => '05/14/1988' ]); $author = Author::all(); $this->assertCount(1, $author); $this->assertInstanceOf(Carbon::class, $author->first()->dob); $this->assertEquals('1988/14/05', $author->first()->dob->format('Y/d/m')); }
$ phpunit –filter test_an_author_can_be_created
OK (1 test, 3 assertions)
git add .
git commit -m “add author”
Test methodというより、mutatorsのcarbonの使い方の方が勉強になりました。