0

アセットが適切にインストールされているかどうかを確認する単体テストを実行しようとしています。既存のファイルにリクエストを送信し、エラーがないかどうかを確認するだけです。

$client = static::createClient();
$client->request('GET', '/bundles/mybundle/css/bg.css');
$this->assertFalse($client->getResponse()->isNotFound(), "Assets seem to not be installed");

残念ながら、Response インスタンスで確認した後、常にルートを使用してある種のコントローラーに到達しようとします。

「GET /bundles/mybundle/css/bg.css」のルートが見つかりません

ルーティング システムを経由せずにここで純粋なリクエストを行う方法はありますか?

4

2 に答える 2

2

そのリクエストを行うには、実際の HTTP クライアント (機能テストに使用しているクライアント実装は実際には HTTP リクエストを作成しません) を使用する必要がありますが、これに間違った方法でアプローチしているようです。アセットのインストールは、展開後のスクリプトの一部である必要があります。したがって、テストは常に (または開発ボックスの構成によっては場合によっては、展開/ステージングの詳細であるという点で) 失敗します。アセットが正しくインストールされていることを確認したい任意の言語で、展開プロセスで簡単なテストを行うだけです。

簡単な例

<?php
system('git clone myrepo');
echo 'Pulled codebase';
system('composer install'); // install dependencies
echo 'Dependencies installed';
system('php app/console assets:install web --symlink'); // install assets
echo 'Assets installed -- testing for presence';
if( !file_exists('blah.gif') ) { 
   echo 'assets not installed! error!';
}
于 2012-10-22T02:25:13.987 に答える
1

テストクライアントは実際にはWebサーバーにアクセスせず、アプリケーションを介して直接リクエストをシミュレートします。

したがって、ファイル構造内にアセットが存在するかどうかを確認するために使用することはできません。動的にロードされるアセットに使用できますが、ここではそうではなく、通常はそうではありません。

@Lusitanianが提案したように、PHPが提供する標準のファイル関数を使用して、存在するかどうかを確認できます。

これらのアセットのパスを見つけるのに助けが必要な場合は、次のKernel::locateResource()方法を確認してください。

$this->container->get('kernel')->locateResource('@AcmeDemoBundle/Resources/public/css/main.css');

リソースが見つからなかった場合、これは例外をスローします。

于 2012-10-22T02:35:03.580 に答える