2012-02-13 6 views
1

backbone-mongodbはバックボーンと実際に互換性があります。元のソリューションはテストのための素晴らしい誓いを持っていました。私のコードも同様にテストしたいと思いますが、どうすればいいのか分かりません。ここで javascriptのユニットテスト:あなたはどうやって模擬しますか? - a(私にとっては難しい)例

は一例であり、私がテストしたいと思います:

update: function(callback) { 

var model = this.model; 

this._withCollection(function(err, collection) { 
    if (err) callback(err); 
    else { 
    var attributes = _.clone(model.attributes); 
    delete attributes['_id']; 
    collection.update({ _id: new ObjectID(model.id) }, {$set: attributes}, {safe:true, upsert:false}, function(err) { 
     model.fetch(); 
     callback(null, model.toJSON()); 
    }); 
    } 
}); 


}, 

このコードはそれで何も特別なものを持っていません。これはnode-mongodb-nativeドライバを使用し、データベース内のレコードを更新します。 AFAIK、適切なテストは、少なくとも、(1)collection.updateが与えられた引数で呼び出されたことを確認することを意味します。(2)callbackが呼び出される時期と方法、(3)モデルは新しいデータを含みます。

誓いをもって私は(2)を確認できますが、チェックする方法は全くありません(1)。実際、私が知っているすべてのユニットテストフレームワーク、qUnit、Jasmineについても同じことが言えます。私はこれが何とかできると確信しています、そして、私はそれらのうちの少なくとも1つを学ぶことに決めましたが、最初に立ち往生したときに選択するのは難しいです。 :)

私はsinon.jsについて知っていて、私がコレクションを嘲笑してしまうまでは、私が持っているすべてのオブジェクトを嘲笑して、あらゆることをテストできると思うが、これは非常に不器用だと思われる。誰かが上記のテストを書いて私を助けてくれますか?私はそれのチュートリアルを書いてうれしいですか?

+2

:あなたの特定のケースについて

は、その機能がこのmyobj「クラス」の一部であると仮定すると、私のような何かを書くのだろうか? –

+0

'_withCollection'の呼び出しを見ることができます。実際には、私は 'this.collectionName'変数を設定し、' _withCollection'はその名前を持つコレクションを取り出し、返されたコレクションでコールバックを呼び出します。 これはnode.jsの一般的なアプローチですフレームワークは完全に非同期なので、どこでもコールバックを使用します。 – Akasha

答えて

1

私はその目的でJasmineを使用します。私はそのライブラリを使い慣れていませんが、specテストを書くためにjQueryを使うプラグインがあります。フィクスチャ/テンプレートを読み込んでテストを実行することができます。コレクションとモデルが更新クラスに渡されているか

describe("My object tests", function() { 

    it("Should update my obj", function() { 
    var noError, flag = false; 
    MyObj.update(function (err, model){ 
     flag=true; 
     noError= err==null; 
     // or you can do other checks on the result 
    }) 

    // we wait for 5 sec until get a response (flag==true) 
    waitsFor(function(){ return flag}, "Timeout on update", 5000); 

    // check if there are no errors 
    expect(noError).toBeTruthy(); 
    }); 

}); 
関連する問題