10

私の Yii アプリは、コントローラー、モデル、コンポーネント、モジュールで phpunit をカバーしていますが、どのビューもカバーしていません。問題は、phpunit のコード カバレッジ ローダーが、カバレッジ レポートの準備中にビュー ファイルをインクルードすることです。$this->beginWidget$this コンテキストがないため、フォームを含むビューにはクラッシュの原因となる呼び出しがあります。

ビューには実際には重要なコードやロジックはありませんが、いくつかの条件や呼び出すループさえrenderPartialあるため、ビュー コードもカバーすることをお勧めします。

この問題の解決策はありますか?

4

1 に答える 1

4

CWebTestCaseを拡張しようとしましたか? 通常、単体テストを作成するときは、必要なデータを提供するためのフィクスチャやものがありますが、ビューのテストと Web アプリの「機能」テストでは、ブラウザーを模倣し、Web アプリで次のようにアクションを実行させるのが一般的に最も簡単です。ユーザーが実際に使用していた場合。現在、この模倣は Selenium で最も簡単に行うことができます (私の意見では)。

Yii Guide on Functional Testingは、 Selenium Documentationと同様に開始するのに適した場所です。Selenium を使用したこの本もあります(最新版がそうであるかどうかはわかりませんが、発行日が 2010 年 8 月 11 日の以前のリリースは知っています)。Larry Ullman のYii Bookには、テストに関する章と彼がその章を完了したときの機能テストでの Selenium の使用。

お役に立てれば!

CWebTestCaseをさらに説明する更新

CWebTestCase はPHPUnit_Extensions_SeleniumTestCaseを拡張します。これは、ビューのテスト、ビュー内でのウィジェットの作成のテスト、テキストの存在のアサート、リンクの「クリック」などのために、phpunit 内で使用できる機能テスト基盤を直接実装します。これらのテストは、コマンドから引き続き実行されます。ただし、テストの実行時に Selenium-RC サーバーを起動する必要があり、有効なブラウザーが構成されている必要があります。有効なブラウザーは、setUp()関数内に次のコードを配置するだけで構成できます。

$this->setBrowser('*firefox /usr/lib/firefox/firefox-bin');

CWebTestCase は PHPUnit_Extensions_SeleniumTestCase を拡張するため、CWebTestCase でコード カバレッジを提供できないという記述は正しくありませ

PHPUnit_Extensions_SeleniumTestCase は、Selenium を介して実行されるテストのコード カバレッジ情報を収集できます。

PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.phpWeb サーバーのドキュメント ルート ディレクトリにコピーします。Web サーバーの php.ini 構成ファイルで、次のように構成します。

PHPUnit/Extensions/SeleniumTestCase/prepend.phpPHPUnit/Extensions/SeleniumTestCase/append.php

としてauto_prepend_fileおよびauto_append_file、それぞれ。を拡張するテスト ケース クラスではPHPUnit_Extensions_SeleniumTestCase、次を使用します。

protected $coverageScriptUrl = 'http://host/phpunit_coverage.php';

スクリプトの URL を構成しますphpunit_coverage.php

于 2013-03-25T18:12:53.940 に答える