8

非常に単純でどこにでもあると思うので、短くて一見ばかげた質問です: RequireJS フロントエンド プロジェクト (非 NodeJS) 内で動作するコード カバレッジを得た人はいますか?

JS の世界で TDD アプローチが普及し、AMD 開発が引き継がれているため、愚かな質問のように思えます。

私は百万のアプローチを試みましたが、すべてが欠けています。私のプロジェクトは、ジャスミン単体テストを使用したバックボーン プロジェクトです。

1) カバレッジ プラグインを使用した JSTD。JSTD は、AMD モジュールを適切にロードおよびインスツルメントするのに問題があります。単一の js ファイル (RequireJS オプティマイザーによって結合) で JSTD を実行すると、コード カバレッジは美しく機能しますが、カバレッジが収集され、ファイル全体でメトリックが定義されることを除きます。サードパーティのライブラリが含まれており、テスト開発を支援するために単一のユニットをターゲットにすることはできないため、これは役に立ちません。ああ。

2) JSCoverage - 完全な失敗、AMD モジュールが好きではありません。

3) Chrome 固有および Firebug 固有の「ライブ」インストルメンター - 失敗、AMD モジュールが気に入らない。

私が試みるすべてのアプローチは、膨大な量のカスタム作業を必要とするようです。では、カスタム ソリューションをゼロから作成する必要があるのでしょうか。

次のアプローチはどうでしょうか。RequireJS オプティマイザーを拡張してコードを計測し、カバレッジを作成します。これは、require.config({ instrument: true }) フラグで有効にできるインメモリ インストルメンテーションになります。require がモジュールをロードするたびに、モジュールが自動的に計測され、モジュール リポジトリに配置されます。カバレッジ統計は、グローバルな require オブジェクトの下のオブジェクトに収集され、Jasmine のテスト実行後など、どこからでもアクセスできます。

入力?

4

5 に答える 5

6

Blanket.jsは、変更された RequireJS ローダーを使用して Qunit と連携します。Jasmine のサポートに取り組んでおり、フィードバックや提案を喜んで受け付けます。

プロジェクトが本番環境に移行する場合、Blanket.js は適していませんが、単なるサイド プロジェクトである場合は、ニーズを満たすかどうかを確認する価値があるかもしれません。

編集: ブランケットが Jasmine をサポートするようになりました。

于 2012-11-06T17:35:00.460 に答える
3

Node-Coverageは実際には AMD に依存しないインターフェイスを提供しており、これはRequireJSと Jasmine で問題なく動作し、独自のサーバーから計測されるコードを提供します。

別のサーバーを実行する必要がないため、開始した RequireJS カバレッジの実装にまだしばらく時間を費やします。

于 2012-06-19T14:59:11.150 に答える
2

AMD モジュールと JSCoverage に関する問題は何ですか? AMD モジュールを使用してセットアップ (QUnit/PhantomJS/JSCoverage) を実行しています。

たぶん、require.config でライブラリ パスを正しく設定するのを忘れただけでしょうか?

「通常の」ファイルではなく、インストルメント化されたコードを使用するようにライブラリパスを変更した後、すべてが機能しました。

于 2012-07-12T14:23:32.407 に答える
2

モカラッパー

カバレッジ レポートを自動化するノード モジュールを作成しました。これは、mocha、jscoverage、およびノー​​ドのアサートに基づいています。require を変更したり、make 変数や環境変数を使用したりする必要はありません。

github でホストされています: mochawrapper

jscoverage はブラウザで実行されない可能性があるため、以下を参照してください: uglify-js に基づくバンカー

于 2012-08-22T08:50:54.280 に答える
2

私が最近リリースした、簡単な javascript ブラウザー内カバレッジ レポートのプロジェクト、JSCovReporter をチェックしてください https://github.com/TwoApart/JSCovReporter

于 2012-07-18T09:08:34.463 に答える