bookdataテーブルが関係するテストを実装しています。
エラー時のテストとして、新規登録及び編集に関しては実装しましたので、今回は削除時のエラーテストを行います。
前回記事はこちら。
fippiy.hatenablog.jp
今回の目的
書籍情報削除時の失敗パターンをテストし、想定動作していることを確認する
なぜやるか
エラー発生時の動作が正常に行えていることの担保をとるため。
やりたいこと
- 所有書籍情報のある書籍を削除した時にエラーが正しく表示されること
やったこと
バリデーションによりエラーした時の情報が取得できていることを確認する
実施内容
書籍情報削除のエラーチェック
テストの内容として存在しないidを選択した時をまずテストとして書くことにしました。
そのまえに、そもそもアクセスできないことを確認しておき、その上で削除テストを書きました。
# ~/tests/Feature/BookdataTest.php
public function test_bookControll_ng_notIdDelete()
{
//// ユーザー生成
$user = factory(User::class)->create(); // ユーザーを作成
$this->actingAs($user); // ログイン済み
$this->assertTrue(Auth::check()); // Auth認証済であることを確認
//// 仮本新規登録
$bookdata = factory(Bookdata::class)->create(); // 書籍を作成
$bookpath = 'book/2'; // 書籍編集パス(存在しないID)
// アクセス不可
$response = $this->get($bookpath); // ページにアクセス
$response->assertStatus(500); // 500ステータスであること
//// 削除
$response = $this->from($bookpath)->post($bookpath, [
'_method' => 'DELETE',
]); // 削除実施
$response->assertStatus(500); // 500ステータスであること
}
予め書籍を生成しておいた上で、別の書籍ページにアクセスしようとしています。
その後、削除についても記述をしエラーとなっていることを確認しています。
削除不可データ削除時のテスト
削除で一番テストしておくべき項目がこちら。
前回記事で、所有者がいる本は削除出来ないようにしました。
実際に削除が出来ないことをテストで確認します。
まず、所有書籍情報を生成するためのファクトリーを作成します。
$ php artisan make:factory PropertyFactory
# ~/database/factories/PropertyFactory.php
use App\Property;
use Faker\Generator as Faker;
$factory->define(Property::class, function (Faker $faker) {
return [
'user_id' => 1,
'bookdata_id' => 1,
'number' => 1,
'getdate' => $faker->date,
'freememo' => $faker->name,
];
});
所有者情報を生成できるようにしました。
後は、書籍情報と所有者を登録した上で削除を実施します。
# ~/tests/Feature/BookdataTest.php
public function test_bookControll_ng_haveProrpertyDelete()
{
//// ユーザー生成
$user = factory(User::class)->create(); // ユーザーを作成
$this->actingAs($user); // ログイン済み
$this->assertTrue(Auth::check()); // Auth認証済であることを確認
//// 仮本新規登録
$bookdata = factory(Bookdata::class)->create(); // 書籍を作成
$bookpath = 'book/'.$bookdata->id; // 書籍削除パス
//// 所有情報登録
$havebookdata = factory(Property::class)->create(); // 書籍を作成
//// 削除
$response = $this->from($bookpath)->post($bookpath, [
'_method' => 'DELETE',
]); // 削除実施
$response->assertSessionHasErrors(['bookdata_id']); // エラーメッセージがあること
$response->assertStatus(302); // リダイレクト
$response->assertRedirect($bookpath); // 編集ページ表示
$this->assertEquals('所有者がいるため削除できません',
session('errors')->first('bookdata_id')); // エラメッセージを確認
}
削除テストを行い、バリデーションメッセージが表示されていることを確認できれば完了です。
次は検索時のテストを行います。
fippiy.hatenablog.jp