LoginSignup
3
0

More than 3 years have passed since last update.

前提

本日学んだことを書いていきます。

本題

CI(継続的インテグレーション)

変更されたソースコードがGitHubなどのリポジトリに提出(プッシュ)されるたびに自動でテストを行うことで、変更後のソースコードをリポジトリのメインライン(masterブランチなど)に統合(gitで言うところのマージ)可能な状態にする仕組み

CD(継続的デリバリー)

メインラインのソースコードが変更されるたびに、自動で本番環境などにデプロイする仕組み

RefreshDatabase

TestCaseクラスを継承したクラスでRefreshDatabaseトレイトを使用すると、データベースをリセットする

なお、トレイトは継承と似たPHPの機能で、汎用性の高いメソッドなどをトレイトとしてまとめておき、他の複数のクラスで共通して使う、という使い方をする

テストのメソッド名

Laravelでは、テストにPHPUnitというテストフレームワークを使用する
PHPUnitでは、テストのメソッド名の先頭にtestを付ける必要がある
ここではindexメソッドのテストであるとわかるよう、testIndexという名前にすることにした

public function testIndex()

※メソッド名をtest始まりにしたくない場合は、以下の例のようにメソッドのドキュメントに@testと記述する

/**
 * @test
 */
public function initialBalanceShouldBe0()
{
    $this->assertSame(0, $this->ba->getBalance());
}

assertRedirect
引数として渡したURLにリダイレクトされたかどうかをテストする

ArticleControllerTest.php
$response->assertRedirect(route('login'));

route('login')は、ログイン画面のURLを返す

factory関数とcreateメソッド
factory関数を使用することで、テストに必要なモデルのインスタンスを、ファクトリというものを利用して生成できる
factory(User::class)->create()とすることで、ファクトリによって生成されたUserモデルがデータベースに保存される
また、createメソッドは保存したモデルのインスタンスを返すので、これが変数$userに代入される

actingAsメソッド

ArticleControllerTest.php
$response = $this->actingAs($user)
            ->get(route('articles.create'));

引数として渡したUserモデルにてログインした状態を作り出す
その上で、get(route('articles.create'))を行うことで、ログイン済みの状態で記事投稿画面へアクセスしたことになり、そのレスポンスは変数$responseに代入される

Arrange-Act-Assertについて

テストの書き方のパターンとして、AAA(Arrange-Act-Assert)というものがある
日本語で言うと、準備・実行・検証

ArticleControllerTest.php
public function testAuthCreate()
    {
        // テストに必要なUserモデルを「準備」
        $user = factory(User::class)->create(); 

        // ログインして記事投稿画面にアクセスすることを「実行」
        $response = $this->actingAs($user)
            ->get(route('articles.create'));

        // レスポンスを「検証」
        $response->assertStatus(200)
            ->assertViewIs('articles.create');
    }

引数と戻り値の型宣言

public function isLikedBy(?User $user): bool

isLikedByメソッドの引数$userの手前には、?Userと記述されている
Userと記述されていることで、引数$userの型はUserクラスのインスタンスであることが宣言されている
さらにUserの手前に?があることで、引数としてnullが渡されることを許容している
PHP7.1から、このnullableな型宣言が使用できる
: boolとあるのは、このメソッドの戻り値が論理型(trueかfalse)であることを宣言している

三項演算子の利用

return $user
    ? (bool)$this->likes->where('id', $user->id)->count()
    : false;

$userがnullでなければ、

(bool)$this->likes->where('id', $user->id)->count()

の結果をメソッドの呼び出し元に返す
$userがnullであれば、falseを返す

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0