JavaScriptコードの単体テストとCodeCoverage

このメモでは、JSコードの単体テストの経験、js-test-driverテストランタイム環境の使用経験、そのコードカバレッジ機能、ヘビでハリネズミをねじる、つまりjs-test-driverとレポートジェネレータからのコードカバレッジデータについて説明します。 PHP_CodeCoverageカバレッジについて。 コードカバレッジに関するこのようなレポートを取得する方法を教えて示します...



そのため、JSコードの単体テストを実装する必要がありました。 Js-test-driverは、実行環境およびテスト作成のフレームワークとして選択されました。 その理由は次のとおりです。



IDEのプラグインが現在操作不能であるという事実にもかかわらず、コンソールからテクノロジーに「触れる」ことができます。 サーバーとランタイムはコンソールとは別に起動され、ユーザーのキックによって「手動モードで」テストを実行できます。



ビジネスで試してみましょう



テストするコード



var greeter = function(toSay){ this.whatToSay = toSay; } greeter.prototype.say = function(sayBye){ if(sayBye == true) return "Goodbye " + this.whatToSay; else return "Hello " + this.whatToSay; }
      
      





そしてテスト



 var testCase = new TestCase("Say"); testCase.prototype.testCase1 = function(){ var i = new greeter('test'); assertEquals("Hello test", i.say(false)); };
      
      





ファイル構造



  \jstd \plugins coverage.jar code.js test.js conf jstestdriver.jar
      
      





実行する構成(YAML形式のconfファイル)



 load: - code.js - test.js server: http://localhost:4224
      
      







打ち上げ



まず、サーバーを起動します



 H:\jstd>java -jar jstestdriver.jar --port 4224
      
      





ブラウザーを起動し、localhost:4224にアクセスして、ブラウザーをマスターします。 テスト実行を開始します。

UPD:任意の数の任意のブラウザーのテストに接続できます。 別のOSの下からリモートマシンから接続することもできます。 ブラウザをテストに接続する==特定のサーバー(この場合はjs-test-driverサーバー)でページを開く





 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all .. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms)
      
      





2つのテストのみを実行したことがわかります。 含む Chromeブラウザーでは1、成功しました。Safariブラウザーでは1でも成功しました。 すべてが素晴らしいです。



コードカバレッジはどうですか?



CodeCoverageは別個のプラグイン によって接続され ます 。 カバレッジデータは、テスト実行の終了時に静的情報(ファイルがN%でカバーされる)として表示するか、 LCOVファイルにアップロードできます。 著者は、genhtmlツールを使用して視覚的なレポートを生成することを提案しています。 Win32に移植された結果のクイック検索は機能しませんでした; Cygwinまたはレポート作成用の別のマシンを上げる気はありません...



コードカバレッジを使用してテストを実行する



プラグインを接続します。 構成ファイル(conf)を編集します。



 load: - code.js - test.js server: http://localhost:4224 plugin: - name: "coverage" jar: "plugins/coverage.jar" module: "com.google.jstestdriver.coverage.CoverageModule"
      
      





テストを実行する



 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all Safari: Runner reset. .Safari: Runner reset. Chrome: Runner reset. .Chrome: Runner reset. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (0,00 ms) H:/jstd/code.js: 83.33333% covered H:/jstd/test.js: 100.0% covered
      
      





結果に加えて、コードカバレッジに関する情報が表示されていることがわかります。 そのような報告からは、ほとんど意味がありません。 テスト結果のファイルへの保存を始めましょう。



 H:\jstd>java -jar JsTestDriver.jar --config conf --tests all --testOutput ./out Safari: Runner reset. .Safari: Runner reset. Chrome: Runner reset. .Chrome: Runner reset. Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (1,00 ms) Chrome 6.0.472.63 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms) Safari 525.28.1 Windows: Run 1 tests (Passed: 1; Fails: 0; Errors 0) (1,00 ms)
      
      





カバレッジ情報はまったく表示されなくなりましたが、LCOV形式のカバレッジを持つファイルが./outフォルダーに表示されました。



LCOV形式



js-test-driverによって生成されるlcovファイルの形式は非常に単純です。



 SF:H:/jstd/code.js DA:1,2 DA:2,2 DA:5,2 DA:6,2 DA:7,0 DA:9,2 end_of_record SF:H:/jstd/test.js DA:1,2 DA:3,2 DA:4,2 DA:5,2 end_of_record
      
      





SFはデータを以下に示すファイルで、DAはカバレッジデータ(DA:文字列、実行回数)です。



美しいレポートを生成します:PHP_CodeCoverage



PHPUnit -PHPの単体テストを実装するためのフレームワークには、コードカバレッジレポートを生成する機能があります。 CodeCoverageモジュールは、切り離しが非常に簡単で、非常にきちんと実装されています。 この構造には、 PHP_CodeCoverage_Driverインターフェースが含まれます。これを実装するクラスは、プロジェクトの他のコンポーネント(レポートビルダーなど)のコードカバレッジに関するデータのソースとして機能します。



Xdebug。 彼はどのようにカバレッジデータを提供しますか?



ファイルについて...



 <?php xdebug_start_code_coverage(); function a() { $x = 10; } $b = 30; var_dump(xdebug_get_code_coverage());
      
      





結果が得られます...



 array( 'Z:\home\test\www\test.php' => array( 4 => 1 8 => 1 10 => 1 ) );
      
      





フォーマットが非常に似ていることがわかります。独自のドライバを作成できます

以下は、カバレッジレポートを生成するコードの簡単な例です。 カバレッジデータはcoverage.datファイルにあると想定されています。 レポートはCodeCoverageReportフォルダーにあります。



 <?php include('PHP/CodeCoverage.php'); include('PHP/CodeCoverage/Driver/Lcov.php'); include('PHP/CodeCoverage/Report/HTML.php'); // ./lcov_coverage.dat contains ine coverage report in LCOV format $coverage = new PHP_CodeCoverage(new PHP_CodeCoverage_Driver_Lcov('./coverage.dat')); $coverage->start('mytest'); $coverage->stop(); $writer = new PHP_CodeCoverage_Report_HTML(); $writer->process($coverage, 'CodeCoverageReport');
      
      





何が起こるかはここで見つけることができます 。 レポートを見ると、複雑な例がテストで完全にカバーされておらず、1つのブランチが欠落しているため、テストで緊急にカバーする必要があることがわかります。



All Articles