これは技術の問題ではありません。すっきり見えるモカを使っている人が多いので試してみます。
私が疑問に思っているのは、Meteor コレクションに関連付けられているモデルなどのテストを人々がどのように扱っているかということです。sinonを使用してデータベース レコードをモックしますか? require
使用できるようにロードするフレームワーク ファイルはありますMeteor.Collection
か?
編集
具体的には、いくつかのMinimongoidモデルを使用するアプリを作成しています。これらのいずれかを見たことがある場合は、すべてのモデルの@_collection
プロパティがnew Meteor.Collection(...)
.
データベース レコードの代わりにモデルを使用することの主な利点の 1 つは、モデルに動作を関連付けることができることです。その動作は、私がテストしようとしているものです。
ボード上の 2 つの駒を含むゲームがあるとします。プレーヤーが駒をクリックすると、正方形を強調表示して、ボード上のすべての正当な動きを表示したいと考えています。ピースには、そのピースがどのように動くか、およびその途中に他のピースがあるかどうかに基づいて、特定の場所が合法的な動きを構成するかどうかを判断する方法があります。途中にピースがあるかどうかを判断するには、おそらくデータベース クエリが必要です。
class Piece extends Minimongoid
@_collection: new Meteor.Collection('pieces')
@find: (selector = {}, options = {}) ->
document = @_collection.findOne(selector, options)
if document
model = new @(document)
_.extend(model, model.attributes)
@where: (selector = {}, options = {}) ->
@_collection.find(selector, options).map (record) =>
model = new @(record)
_.extend(model, model.attributes)
class Bishop extends Piece
@code: "bishop"
isLegalMove: (location) ->
@isOnMyPath(location) && @noPiecesInMyWay(location)
noPiecesInMyWay: (location) ->
_.all Piece.where({ color: @otherColor() }), (piece) ->
!piece.isOnMyPath(location) || (piece.location == location && piece.color == @otherColor())
したがって、このクラスをテスト フレームワークでロードすると、実際には、このコードをテストするための 2 つのオプションしか表示されません。
- @_collection オブジェクトをsinonのようなものでモックする
- モデルがアクセスできるように、Meteor (またはその一部) をテスト フレームワークによってロードします。
Meteor.Collection
アップデート
約 1 年後、私はこれに戻って、提案されたテスト方法をいくつか試しました。
利用可能なすべてのソリューションの中で最も完成度が高いと思われるRTDを調べましたが、実行できませんでした。
Laikaも見ましたが、実際には構文は気にしませんでした。私は BDD スタイルの構文が欲しいのですが、Laika が提供するものは比較するとやや不可解に見えます。
しかし、少し試行錯誤した後、meteor-mocha-webを機能させることができました。これまでのところ、非常に満足しています。アプリを実行し、テスト ファイルをプルするため、フレームワークのどの部分もモックする必要はありません。もちろん完璧にはほど遠いですが、私が最初に実行できたものであり、私が好む構文を備えているため、勝っています。答えてくれたjagilに感謝します!