第4章 タスクの追加
01.ルート設定とテストのためのコントローラ実装
この章では「タスクの追加」機能を実装しよう。
今回も、「ルートの設定」からだ。
タスク追加画面のためのルート設定
タスクの追加を行なうためには、以下のステップで処理を進めることになる。
- タスクの一覧画面から新規作成画面へ遷移
- Formから登録内容を受け付けて登録実施
- 一覧画面へ再度遷移
今回は、新規作成専用の画面へのルートと、そこからデータの登録を行なうルートが必要だ。 2.から3.へ遷移する時は、更新処理の時と同じ要領でリダイレクトを行なおう。
まずは、新規作成専用の画面の実装から進めよう。
routes/web.php
は下記のようになる。
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/tasks', 'TaskController@index');
Route::get('/tasks/{id}', 'TaskController@detail')->where('id', '[0-9]+');
Route::put('/tasks/{id}', 'TaskController@update')->where('id', '[0-9]+');
Route::get('/tasks/new', 'TaskController@new');
ルートの確認のためのテスト
ルートを追加したので、テストを書こう。
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
{
use RefreshDatabase;
(略)
/**
* Get New Task Path Test
*
* @return void
*/
public function testGetNewTaskPath()
{
$response = $this->get('/tasks/new');
$response->assertStatus(200);
}
}
testGetNewTaskPath()
というテストを実装した。
単純に、新規作成の画面を正しく呼び出せるか、というテストだ。
では、実際にテストを実行してみよう。
$ vendor/bin/phpunit
PHPUnit 6.5.8 by Sebastian Bergmann and contributors.
.....F...... 12 / 12 (100%)
Time: 17.96 seconds, Memory: 24.00MB
There was 1 failure:
1) Tests\Feature\TaskControllerTest::testGetNewTaskPath
Expected status code 200 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:111
FAILURES!
Tests: 12, Assertions: 26, Failures: 1.
今回も、いつも通りの失敗だ。
ルートに対応したコントローラクラスとメソッドの実装
というわけで、いつも通りにルートに対応したメソッドの仮実装を行なってみよう。
今回はapp/Http/Controllers/TaskController.php
に、new()
というメソッドを実装する。
<?php
namespace App\Http\Controllers;
use App\Task;
use Illuminate\Http\Request;
class TaskController extends Controller
{
(略)
public function new()
{
return "new task";
}
}
仮実装として、"new task"を返すようにした。 テストを実行してみよう。
$ vendor/bin/phpunit
PHPUnit 6.5.8 by Sebastian Bergmann and contributors.
............ 12 / 12 (100%)
Time: 20.96 seconds, Memory: 20.00MB
OK (12 tests, 26 assertions)
無事にパスした。
次は、ここから本当のビューを呼び出す処理と、ビューの中身を作成してみよう。