1

Yiiコード内でモジュールの機能ユニットテストを実行しようとすると、次のエラーが発生し続けます。

CException: CHttpRequest is unable to determine the request URI.

最初は、モジュールが見つからなかったからです。ただし、URLを間違ったものに変更すると、ビューが見つからなかったという正しいエラーが表示されます。

これは私のテストコードがどのように見えるかです

public function testViewControllerModule()
{
    ob_start();
    Yii::app()->runController('module/controller/view');
}

私が見逃しているかもしれないものについてのアイデアはありますか?

4

2 に答える 2

3

bool.devs の回答はこれまでのところ機能しています。

このブログ投稿は、例外の起源をかなりよく説明しています:
http://mattmccormick.ca/2012/09/14/unit-testing-url-routes-in-yii-framework/

私の場合、ソリューションを一般化して、/www/protected/tests/bootstrap.php に次の変数を設定しました。

...

$_SERVER['SCRIPT_FILENAME'] = 'index-test.php';
$_SERVER['SCRIPT_NAME'] =  '/index-test.php';
$_SERVER['REQUEST_URI'] = 'index-test.php';

Yii::createWebApplication($config);

「index.php」の代わりに「index-test.php」を使用することを検討してください。これには、フィクスチャやその他のテスト関連の構成を担当する構成「test.php」が含まれているためです。

誰かがより良い提案を持っている場合は、お気軽にコメントしてください:)

敬具

于 2013-09-04T19:47:45.547 に答える
2

サーバー変数を設定していないためだと思います。つまり$_SERVER、コントローラーで次のようなことをしている可能性があります。

Yii::app()->request ....

したがって、テストを実行する前に、サーバー変数にもフィクスチャを使用していることを確認してください。今のところこれで十分だと思います:

$_SERVER=array(
    'REQUEST_URI'=>'index.php', // the other fields should follow
);

ただし、機能テストを実行するには、SeleniumRC を使用することをお勧めします。その場合、これらの回避策を実行する必要はなく、ユーザーのクリックもシミュレートできると思います。

Functional Testingの初期ガイド、 selenium rc phpunit ガイド、およびCWebTestCase のドキュメントを読んでください。

注:一部の変数にはまだフィクスチャを使用する必要があるかもしれません。また、テストの経験があまりないため(これは悪いことです)、セレンについて完全に正しいかどうかはわかりません。

于 2012-06-21T03:03:19.520 に答える