Laravel使ってみた (7) - Controller Testing -

2013-07-09T00:00:00+00:00 Laravel PHP

久々にLaravelなドキュメント読みを遂行。 http://laravel.com/docs/testing のコントローラーテストな部分だけをやってみた。

  • /でアクセスすると/show/1にリダイレクトされる
  • /show/{id}でアクセスするとhome.blade.phpをレンダリング。引数をidとしてビューにバインド(但し使わない。というかhome.blade.php自体はただ初期に入ってるLaravel Quickstartなレイアウトをレンダリングするだけ)

という事でめんどくさいのでコントローラーは省略

でテストはapp/testsに書くんだけど、公式的な所としては末尾がTest.phpで終わるのが望ましいのか、TestCase.phpな感じな末尾で作るとphpunitを実行しても反応しない(phpunit.xmlのにすると認識するという挙動が確認)

んまぁてな感じでapp/tests/HomeControllerTest.phpを定義する

<?php

class HomeControllerTest extends TestCase {
    public function test_index() {
        $response = $this->call("GET", "/");
        $this->assertRedirectedTo("/show/1");

        // indexではshowにリダイレクトしているのでステータスは302になる
        // $this->assertResponseOk();
        // $this->assertResponseStatus(200);
    }

    public function test_show() {
        $crawler = $this->client->request("GET", "/show/99");
        $response = $this->client->getResponse();

        $this->assertResponseOk();

        $this->assertViewHas("id", 99);

        // 上と同じ?
        $view = $response->original;
        $this->assertThat($view["id"], $this->equalTo(99));

        $this->assertThat(
            $crawler->filter("h1")->text(),
            $this->equalTo("Laravel Quickstart")
        );
    }
}

基本はIlluminate\Foundation\Testing\TestCaseを継承する形にはなると思うんだけど、デフォでapp/testsにはTestCase.phpが存在する。それを継承して使えば良い。

んまぁそんな感じで。Eventとかをまだ進めてないので、とりあえずコントローラーな部分だけを色々やってみただけなので今後進める毎に色々テストな部分とかも突っ込んでみる予定

Laravel使ってみた (8) - Laravelでのモックテスト - PullToRefresh(ListFragment)#onRefreshをTouchUtilsでテストする