環境
PHP 7.1
Laravel 5.5
VirtualBoxにVagrantを入れて、その仮想環境上でLaravel環境構築
実現したいこと
https://www.hypertextcandy.com/laravel-tutorial-create-task/
に記載の、テストコードを記載したTaskTest.phpを実行。
意図的にエラーを起こすような値をpostした時、想定したエラーメッセージが返ってきて、
vagrant上のコマンドラインで
due_date_should_be_date
due_date_should_not_be_past
にチェックマークが付くこと
PHP
1<?php 2 3namespace Tests\Feature; 4 5use App\Http\Requests\CreateTask; 6use Carbon\Carbon; 7use Tests\TestCase; 8use Illuminate\Foundation\Testing\RefreshDatabase; 9 10class TaskTest extends TestCase 11{ 12 // テストケースごとにデータベースをリフレッシュしてマイグレーションを再実行する 13 use RefreshDatabase; 14 15 /** 16 * 各テストメソッドの実行前に呼ばれる 17 */ 18 public function setUp() 19 { 20 parent::setUp(); 21 22 // テストケース実行前にフォルダデータを作成する 23 $this->seed('FoldersTableSeeder'); 24 } 25 26 /** 27 * 期限日が日付ではない場合はバリデーションエラー 28 * @test 29 */ 30 public function due_date_should_be_date() 31 { 32 $response = $this->post('/folders/1/tasks/create', [ 33 'title' => 'Sample task', 34 'due_date' => 123, // 不正なデータ(数値) 35 ]); 36 37 $response->assertSessionHasErrors([ 38 'due_date' => '期限日 には日付を入力してください。', 39 ]); 40 } 41 42 /** 43 * 期限日が過去日付の場合はバリデーションエラー 44 * @test 45 */ 46 public function due_date_should_not_be_past() 47 { 48 $response = $this->post('/folders/1/tasks/create', [ 49 'title' => 'Sample task', 50 'due_date' => Carbon::yesterday()->format('Y/m/d'), // 不正なデータ(昨日の日付) 51 ]); 52 53 $response->assertSessionHasErrors([ 54 'due_date' => '期限日 には今日以降の日付を入力してください。', 55 ]); 56 } 57}
現状
上記を記述のうえ、
./vendor/bin/phpunit ./tests/Feature/TaskTest.php
を実行すると、エラー発生
エラー内容
There were 2 failures:
- Tests\Feature\TaskTest::due_date_should_be_date
Failed asserting that an array contains '期限日 には日付を入力してください。'.
/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:700
/home/vagrant/code/tests/Feature/TaskTest.php:49
- Tests\Feature\TaskTest::due_date_should_not_be_past
Failed asserting that an array contains '期限日 には今日以降の日付を入力してください。'.
/home/vagrant/code/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:700
/home/vagrant/code/tests/Feature/TaskTest.php:66
エラー解消のため試したこと
・配列に日本語が含まれているのがいけないのか?と思い、日本語部分を英語に書き直し
→エラー発生。エラー文は同様
・公式ドキュメントでの使用法を確認する https://readouble.com/laravel/5.5/ja/http-tests.html
→
$response->assertSessionHasErrors(array $keys, $format = null, $errorBag = 'default');
配列を使用しているようなので、なぜ自分のコードでエラーになるか分からない
実際に使用している例が見つけられず、記述方法が間違っているのか、他に原因があるのかの判別もつきません。ご存知の方どなたかご教示いただけますと大変ありがたく存じます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/15 13:39