7

うわー、なんてめちゃくちゃ。これがシナリオです。

  • バックボーン駆動のJSアプリ。
  • 次のように初期化されたAMD機能のRequireJS:

    <script data-main="js/main" src="js/require.js" type="text/javascript"></script>
    

    次に、main.js内で次の構成コードを実行します。

    require.config(
    {
        paths:
        {
            ... : ...
        }
    });
    

    各バックボーンビュー/モデル/ルーターは「define(...)」モジュールであり、「require( "theOneRouter"、...)」はmain.jsで1回呼び出されます。

  • Uglify/Closureでオプティマイザーとして使用されるr.js。1つの「コンパイル済み」main.jsは、.netフレームワーク内で動的に選択する./releaseサブフォルダーに作成されます。

  • Backbone + Require.JSを機能させるのにかなりの時間がかかりましたが、今はうまく機能しています!

  • 次に、その上にジャスミンを叩くのも少しカスタム作業が必要でしたが、うまくいきました。SpecRunner.htmlからrequire.jsをロードし、requireのdefine(...)呼び出しを使用して各テストモジュールをAMDとして定義し、requireのrequire(...)呼び出しから1回Jasmineをインスタンス化して実行する必要がありました。 SpecRunner.html内:

    require(
    [
    //"test/specs/testSpec1",
    "test/specs/views"
    ],
    function ()
    {
        jasmine.getEnv().updateInterval = 1000;
        var reporter = new jasmine.TrivialReporter();
        jasmine.getEnv().addReporter(reporter);
        ....
        ....
    });
    

    これもうまくいきます。ロードと実行をテストします。問題はありません。Requireがすべてを処理します。

ここで、JSTestDriverのようなフレームワークをランナーとして機能させたいと思います。JSTDを選択したのは、そのシンプルさ、リモートブラウザーでのテスト機能、コードカバレッジのサポートのためですが、他の提案も受け付けています。

JSTestDriver自体は正常に動作します。私が抱えている唯一の問題は、JSTD + Jasmine+ReuireJSの組み合わせを一緒に実行することです。最大の問題は、構成ファイルでJSTDにJasmine / Requireテストモジュールをロードするように指示すると、次のエラーが発生することです。

http://requirejs.org/docs/errors.html#mismatch

r.jsを使用してすべてのコードを1つのmain.jsに最適化すると、カバレッジを含む組み合わせは機能しますが、カバレッジは1つの巨大なファイルに収集され、分析するのは困難です。言うまでもなく、50k行のコードjsファイルをインストルメントしてJSTD経由で実行するには非常に長い時間がかかります。

すべてのJasmineテストモジュールとコードモジュールをロードするフィクスチャのようなjsファイルを作成しようとしましたが、上記の「不一致」エラーに戻り続けます。また、JSTDに各モジュールについて個別に通知しない場合(htmlをロードすることにより)実際の読み込みを行う/jsフィクスチャ)コードカバレッジ用にインストルメント化されません。

誰かがこの特定の組み合わせを機能させることができましたか?多分私はあまりにも多くを求めています...

4

4 に答える 4

4

解決策は、まさにdevadvocateが述べたとおりです。JsTestDriverとRequire.jsは、ファイル/依存関係の読み込みを管理するために競合しているため、(匿名モジュールと定義を使用して)Require.jsの方法で100%実行しようとすると、JsTestDriverが適合します。代わりに、モジュールに名前を付けて、define([...]の代わりにrequire([...]、function(...){...を使用する必要があります。QUnit、Requirejs、 JSTDによるコードカバレッジ:js-test-driver + qunit + Coverage + requirejs。私の例ではQUnitを使用していますが、Jasmineの代わりにQUnitを簡単に使用できます。これを理解するために、私はPhantomJSを使用することを検討しましたが、ユーザーベースでは、クロスブラウザーテスト、IE7、IE8、IE9などを使用することが不可欠であるため、単一のWebKitではカットできません。JsTestDriverは非常に便利ですが、ドキュメントが不十分だと開発者が遠ざかってしまうのではないかと思います。すぐに、GitHubで私の例のコードを取得します。お役に立てれば。

于 2012-06-30T01:10:22.357 に答える
2

これを機能させることができず、PhantomJSを使用してジャスミンテストを実行することになりました。http://phantomjs.org/

于 2012-05-26T12:00:05.530 に答える
2

テスト対象のモジュールに名前を付け、テストでdefineの代わりにrequireを使用してみましたか?

https://github.com/podefr/jasmine-reqjs-jstd

編集:

オープンソースのツールキットをリリースしました。これは、私を助けるだけでなく、他の人にも役立つことを願っています。これは、多くのオープンソースツールを組み合わせたものであり、すぐに使用できるrequirejsバックボーンアプリを提供します。

実行する単一のコマンドを提供します:dev Webサーバー、jasmineシングルブラウザーテストランナー、jasmine js-test-driverマルチブラウザーテストランナー、およびJavaScriptとCSSの連結/縮小。また、本番デバッグ用にアプリの縮小されていないバージョンを出力し、ハンドルバーテンプレートをプリコンパイルし、国際化をサポートします。セットアップは必要ありません。それはうまくいきます。

また、テスト中の名前のないモジュールもサポートします。

http://github.com/davidjnelson/agilejs

于 2012-06-27T22:46:18.493 に答える
0

このリポジトリ(Bredele appolo )を確認してください。これは、require.jsとJsTestDriverがロードされた匿名モジュール上でJasmineBDD仕様を実行する環境です。

匿名でないモジュールを開発している場合は、podefrソリューションを使用することもお勧めします。

オリヴィエ

于 2013-01-20T18:10:58.423 に答える