Fippiyのプログラム学習内容アウトプットBlog

日々の学習内容をアウトプットして振り返りを実施する。

Laravel開発、bookdataテーブルをテストする【3】書籍情報削除時のエラーテストを実装する

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 

<?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