2014-01-11 21 views
7

たとえば、このtest-main.jsとこのmain.jsには、パスとシムが重複しています。大規模なプロジェクトの場合、それらの多くがあるかもしれません。インストール済みのBowerコンポーネントをmain.jsに追加するのにgrunt-bower-requirejs pluginを使用することもできますが、その後、手作業またはプログラムでtest-main.jsにコピーする必要があります。カルマとRequireJS:srcに重複を避け、RequireJS configをテストする

この重複を回避する便利な方法はありますか?たとえば、RequireJSに別の設定ファイルを含めるように指示しますか?

答えて

5

私はまた、情報を複製することを嫌います。テストスイートでrequire.configを2回呼び出すHTML設定を使用して、この問題を回避します。私のテストスイートが最初にロードさRequireJSでそう

HTML、その後、requirejs-config.jsという名前のファイルにある一般的な構成、:

<script type="text/javascript" src="lib/requirejs/require.js"></script> 
<script type="text/javascript" src="requirejs-config.js"></script> 

requirejs-config.jsファイルは特別なものではありません。ここでは簡略版です:

require.config({ 
baseUrl: 'lib/', 
paths: { 
    browser_test: '../../../browser_test', 
    jquery: 'external/jquery-1.10.2', 
    bootstrap: 'external/bootstrap/js/bootstrap.min', 
    // [...] 
}, 
packages: [ 
    { 
     name: "lodash", 
     location: "external/lodash" 
    } 
], 
shim: { 
    bootstrap: { 
    deps: ["jquery"], 
    exports: "jQuery.fn.popover", 
    }, 
    // [...] 
}, 
config: { 
    // [...] 
}, 
enforceDefine: true 
}); 

はその後、テスト環境に適用する設定でrequire.configを呼び出し<script>要素があります:

<script> 
    require.config({ 
     paths: { 
      'mocha': '/node_modules/mocha', 
      'chai': '/node_modules/chai/chai' 
     }, 
     shim: { 
      'mocha/mocha': { 
       exports: "mocha", 
       init: function() { this.mocha.setup('bdd'); return this.mocha; } 
      } 
     }, 
     config: { 
     // [...] 
     } 
    }); 
</script> 

'mocha/mocha'シムはおかしいが、それは正しいです。)

この具体的なケースでは、への2回目の呼び出しでは、paths,shimおよびconfigに新しい値が追加されますが、可能であれば、より先にの値を上書きすることができます。たとえば、'jquery'が解決するパスを変更したり、ブートストラップのシムを変更することができます。

私は私のテストスイートにMocha + Chaiを使用していますが、上記の解決策は実際にはMocha特有のものではありません。

+2

素晴らしいアイデア。私はちょうど 'require.config'が2回呼び出すことができることを無視しました。 私はkarmaを使用していますので、app/js/main.jsとtest/unit/test-main.jsの両方を順番に追加し、 'requires.config'を選択的に追加または上書きしました。 –

+0

素晴らしいソリューション@マーリンラン。ヒントをありがとう! – tonyhb

+0

@MerlinRanあなたのソリューションの例を投稿できますか? – deitch

関連する問題