クライアント側のものがcoffeescriptで記述され、require.jsでロードされるWebアプリがあります。
expressoなどのノードベースのテストランナーを使用してこれらを分離してテストできるようにしたいと思います(他の提案も歓迎します)。これにより、クライアント側のテストをCIサーバー(現在はTeam City)と統合できます。
これが私のディレクトリ設定です:
.
├── coffee
│ ├── models
│ ├── node_modules
│ │ └── expresso
│ ├── spec
│ ├── tests
│ └── views
├── static
│ └── js
│ ├── lib
│ ├── models
│ ├── tests
│ └── views
これらは、次のようにrequire.jsを使用して接続されます。
deps = [
"lib/backbone", "models/websocket_collection", "/static/js/lib/date.js"
]
define(deps, (Backbone, ws) ->
# module code and exports here
そして、次のようにブラウザにロードされます。
<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="my_mod" src="/static/js/my_mod.js"></script>
アイデアの世界では、次のようなテストモジュールを使用できるようにしたいと考えています。
{Model1, Model2} = require "models/some_module"
exports.test_a = ->
assert.equal # etc etc
いくつかの問題があります(zombie.jsで遊んだ場合を除いて、ノードサーバー側を実際に使用していません)
プレーンなjavascriptの依存関係がすべて(static / js / lib内で)どこにあるかをノードに伝えるにはどうすればよいですか?これらの一部はダウンロードされたままですが、backbone.jsはrequire.jsでマークアップされています
define(function(require, exports, module) { (function(){
実際にテストを実行するにはどうすればよいですか?私はr.jsを試しました(これは、ブラウザー側のrequireとノードのrequireの間のブリッジであると理解しています)
私が得ている問題は次のとおりです。
ReferenceError: define is not defined
また、すべてのクライアントコードを収集するためにブラウザ側をロードするスクリプトであるrequire( "allplugins-require")を試しましたが、これはノードのrequireを壊しているようです。
- 誰かこれをやっていますか?
- これを行っていない場合、コードをどのようにテストしていますか(CIとの統合のボーナスポイント)?
- サーバー側で少しうまく機能する可能性のあるクライアント側の依存関係を管理するためのrequire.jsの代替手段はありますか?
人々が使用している別のアプローチを聞いてとてもうれしく思います。
ありがとう、ベン