CakePHP 3 Ajaxでのテスト設定(小ネタ)

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内に関数として登録しておけば どのコントローラテストクラスでも使用できるので大変便利です。
是非お試しください。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ