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つのブランチが欠落しているため、テストで緊急にカバーする必要があることがわかります。

Source: https://habr.com/ru/post/J105696/


All Articles