FuelPHP

コントローラのユニットテストでHTMLを描画しようとするとAssetファイルが正常の読み込まれない

More than 1 year has passed since last update.

例えば以下のようなテストを書いた場合。

hogehoge_test.php
public function test_index()
{
    $request = \Fuel\Core\Request::forge('/');
    $response = $request->execute()->response();

    // この行のrender()メソッドでエラーが出る。
    $html = $response->body()->render();
    $pattern = '/' . preg_quote('トップページ', '/') . '/u';
    $this->assertRegExp($pattern, $body);
}

以下のようなエラーが出る。

メッセージ
Fuel\Core\FuelException: Could not find asset: bootstrap.css

原因は、Assetファイルを探索する際の処理で、
カレントディレクトリがドキュメントルート(public/)になっていることが想定されているから。
これはデフォルトの挙動で、設定すれば変更することができる。

Assetクラスのオプションを設定するので、
以下のような内容のfuel/app/config/test/asset.phpというファイルを設置する。

<?php
return array(
    'paths' => [DOCROOT.'public/assets/']
);

これで無事にAssetファイルが読み込まれるようになった。