limeを使ってAjaxをテストするときの注意点

ハマった。。

limeを使って機能テストをする際、通常であれば以下のように記述すればAjaxリクエストのテストをすることができる。

$browser = new sfBrowser();
$test = new sfTestFunctional($browser);
$browser->setHttpHeader('X-Requested-With', 'XMLHttpRequest');
$test->get('/ajax/')->
    with('response')->
        begin()->
        isStatusCode(200)->
    end()
;

ただこのテスト、ajaxを判定するisXmlHttpRequestを挿入する位置によっては、想定するような結果が返って来ない場合があった。
具体的には

class ajaxActions extends sfActions
{
    public function preExecute()
    {
        parent::preExecute();
        $this->forward404Unless($this->getRequest()->isXmlHttpRequest());
    }

    public function executeHoge(sfWebRequest $request)
    {
        // なんかの処理
    }
}

な場合、ステータスコードは200を返してくれるのだけど、

class ajaxActions extends sfActions
{
    public function preExecute()
    {
        parent::preExecute();
    }

    public function executeHoge(sfWebRequest $request)
    {
        $this->forward404Unless($this->getRequest()->isXmlHttpRequest());
    }
}

の場合はステータスコードがなぜか404になる。。sfBrowserに設定したHTTPヘッダーがうまく読み込まれていないのが原因だとは思うのだけど、いまいち確証が持てない。。
limeでのテストやりにくい。。