CakePHP 3 Ajaxでのテスト設定(小ネタ)
皆さんどうもfujiharaです。
残暑がまだまだ続きますね。個人的に海の家が解体されているのを見ると
夏が終わるんだなって気持ちになります。
本日は CakePHP 3で Ajax しか受け付けないページでのテスト設定を紹介します。
コントローラメソッド
以下の様なメソッドの場合テスト内で$this->get(), $this->post()を 使用しても反応してくれません。
コントローラ
public function ajaxOnly()
{
if (!$this->request->is('ajax')) {
....(エラー処理)
}
}
設定
この場合、メソッドへのリクエストヘッダーを以下のようにして 書き換えることによって、Ajaxを偽装できます。
テスト内
public functoin testAjaxOnly()
{
//以下で偽装
$this->configRequest([
'headers' => [
'X-Requested-With' => 'XMLHttpRequest',
'Accept' => 'application/json',
'ContentType' => 'application/json; charset=utf-8',
],
]);
//以下テストで $this->get(), $this->post() が仕様できます。
}
まとめ
いかがだったでしょうか? AppIntegrationTestCase内に関数として登録しておけば
どのコントローラテストクラスでも使用できるので大変便利です。
是非お試しください。