概要3日間ぐらいで体得したCakePHPのテストユニットを活用したテストの知見まとめチームへの情報共有用を公開しても問題ない文言に差し替えたものです。テスト-3.xまずPHPUnitをインストールする。vendor/bin/phpunitまた、テストケースを指定してテストすることも可能。対象のコントローラのみをテストする方が賢い?(もちろん、最後には通しでテストする必要があるだろうが)。ビューのテストケース(触ってない)ページを取得できるかどうかのテスト例(get)以下に示す例はコントローラのテストなのでHogesControllerTest.phpに書く。$this->assertResponseOk();}assertResponseOk()メソッドは、レスポンスに2xx系がくればテストを通すもっと厳密に、テンプレートが表示されたかどうかをアサートするには$this->assertTemplate('login');とすると良い。他のアサーションメソッドは公式ドキュメントを参照。'Auth.User.id');}post()メソッドの引数に乗せて送信する。この例では、loginにユーザ名、passwordにパスワードを乗せ、ログイン成功後のページにリダイレクトされているか、また、セッションにユーザが保存されているか(=>正常にログインできているか)を見ている。$this->assertResponseOk();}セッションにAuth以下をセットしてから処理する。$this->assertRedirectContains('/hoges/login');}ログインに成功した場合、接続を試みた対象のページから戻る設定があるのでURLは/hoges/loginではなく/hoges/login?redirect=%2Fhoges%2Fpiyoである(っぽい)。したがって、assertRedirectContains()メソッドを使う方が良い。DBとFixtureログイン処理などのテストには、ユーザ名とパスワードをペアを保存したDBが必要である。テストでは、設定がデフォルトであればテスト用のDBに接続する。テスト用のDBに接続するための設定はconfig/app.phpに書く。],Fixtureは一時的に使えるデータセットで、tests/Fixtureに入っている。Fixtureはテーブル名に則って、FugasFixture.phpのように名付けられる。Fixtureを生成する元になるテーブル名を指定する。fugasFixtureはロードしないと使えないので必ずロードする。//省略}もちろんModelテスト内でも読み込める。ログイン機能のテストをするとき、Fixtureのpasswordにはハッシュ後のパスワードを入れる。$query->count());}正しい形式でデータをPostしたあと、それがDBに保存されているかをFindで発見する。データがあれば結果は1件以上。whereにはユニークかつ今Postしたデータかどうかを確認できるものが望ましい。}DefaultPasswordHasherのインスタンスからcheck()メソッドを利用して正誤を確かめる。期待したステータスコードが返ってこない時200系を期待したけど違うコードが返ってきた!みたいな時に疑うべきこと。コントローラ側でエラーが出ている可能性がある。大体テストケースでのfixtureの読み忘れとか。コントローラ自体がおかしいならテスト書く前に直せ。コントローラ若しくはアクションの指定の仕方が間違っているかも。cakaPHPのルーティングを確認する。enableCsrfToken()とかenableSecurityToken()の付け忘れが多い。コンポーネントが有効かつフォームを扱うなら入れる。セッションがセットされておらずloginページに戻された時とかに頻出。余談このドキュメントを僕はチームの奴らに聖書と呼ばせています。pachicourse労働者階級1年目になりました。