第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で実際にやってみたい。

準備ができたら、次の節へ行ってみよう。

Last Updated (JST): 7/7/2019, 2:32:08 PM