unoh.github.com

symfonyのfunctional testを携帯のUserAgentにしよう

Wed Jun 02 08:50:09 -0700 2010

こんにちは市丸です。
symfony コマンドで generate:module をすると、functional test用ファイルが自動生成されます。
symfonyで携帯サービスを作る場合、frontendは携帯端末 backendではPCブラウザでアクセスすることがほとんだと思います。 frontendのfunctional testを携帯のUserAgentする方法を紹介します。

※試したのは、symfony 1.4です。

まずスケルトンをコピー

mkdir -p data/skeleton
cp -r lib/vendor/symfony/lib/task/generator/skeleton/module data/skeleton/

data/skeleton/module/test/actionsTest.phpを以下のように改変。

<?php
include(dirname(__FILE__).'/../../bootstrap/functional_##APP_NAME##.php');

if (!$aBrowser){
  $aBrowser = new sfBrowser();
}
$browser = new sfTestFunctional($aBrowser);

$browser->
  get('/##MODULE_NAME##')->

  with('request')->begin()->
    isParameter('module', '##MODULE_NAME##')->
    isParameter('action', 'index')->
  end()->

  with('response')->begin()->
    isStatusCode(200)->
  end()
;

test/bootstrap/functional.phpをApplicationごとに切り替えるため コピーを作成します。

cp test/bootstrap/functional.php test/bootstrap/functional_frontend.php
cp test/bootstrap/functional.php test/bootstrap/functional_backend.php

functional_frontend.php の最後に以下を追加しましょう

$aBrowser = new sfBrowser();
$aBrowser->setVar('HTTP_USER_AGENT', 'DoCoMo/2.0 N06A3(c100;TB;W24H12)');
$aBrowser->setVar('REMOTE_ADDR','127.0.0.1');
$aBrowser->setVar('HTTP_X_DCMGUID', 'HOGEHOGE'); // iモードIDはこんなかんじ

さらに詳しいfunctional testを行いたい場合は
symfony 機能テストを御覧下さい。