第4章 タスクの追加
03.ルートの設定とコントローラ実装(タスク追加)
タスク追加のためのルートとコントローラーのテスト
次は、タスク追加の処理を実装していこう。
ルートの設定自体は前回に行なっているので、 テストから実装する。
tests/Feature/TaskControllerTest.php
を下記のようにする。
<?php
namespace Tests\Feature;
use App\Task;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class TaskControllerTest extends TestCase
{
(略)
/**
* Get New Task Path Test
*
* @return void
*/
public function testGetNewTaskPath()
{
$response = $this->get('/tasks/new');
$response->assertStatus(200);
}
/**
* Post Task Path Test
*
* @return void
*/
public function testPostTaskPath()
{
$data = [
'title' => 'test title',
];
$this->assertDatabaseMissing('tasks', $data);
$response = $this->post('/tasks/', $data);
$response->assertStatus(302)
->assertRedirect('/tasks/');
$this->assertDatabaseHas('tasks', $data);
}
}
testPostTaskPath()
を追加した。更新の時に追加したtestPutTaskPath()
とほぼ同様だ。
put()
を使っていた箇所を、今回はpost()
としている。(126行目)
では、テストを実行してみよう。
$ vendor/bin/phpunit
PHPUnit 6.5.8 by Sebastian Bergmann and contributors.
......F....... 14 / 14 (100%)
Time: 33.19 seconds, Memory: 24.00MB
There was 1 failure:
1) Tests\Feature\TaskControllerTest::testPostTaskPath
Expected status code 302 but received 500.
Failed asserting that false is true.
/Users/[ユーザ名]/task-manager/task-manager/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:78
/Users/[ユーザ名]/task-manager/task-manager/tests/Feature/TaskControllerTest.php:128
FAILURES!
Tests: 14, Assertions: 29, Failures: 1.
予定通りに失敗となった。 では、コントローラの実装に取り掛かろう。
コントローラー実装とテスト
コントローラーの実装だ。
ここでは、受け取ったデータを実際に保存するcreate()
の実装を行なう。
<?php
namespace App\Http\Controllers;
use App\Task;
use Illuminate\Http\Request;
class TaskController extends Controller
{
(略)
public function new()
{
return view('tasks.new');
}
public function create(Request $request)
{
Task::create(['title' => $request->title, 'executed' => false]);
return redirect('/tasks');
}
}
レコードを登録して一覧画面へ遷移、という内容だ。
では、テストを再度実行してみよう。
$ vendor/bin/phpunit
PHPUnit 6.5.8 by Sebastian Bergmann and contributors.
.............. 14 / 14 (100%)
Time: 21.08 seconds, Memory: 22.00MB
OK (14 tests, 32 assertions)
無事に成功となった。
更新の時と同様に非常にすんなりといったが、今回は少し違うことをやってみよう。 Webシステムのフォームでは、よく「バリデーション」と呼ばれる入力値のチェックを行なっている。 これをLaravelで実際にやってみたい。
準備ができたら、次の節へ行ってみよう。