1

バックボーンと互換性があるようにbackbone-mongodbを書き直しました。元のソリューションにはテストの誓いがあり、コードもテストしてもらいたいのですが、どうすればよいかわかりません。

これが例です、私はテストしたいと思います:

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について知っており、コレクションもモックされるまで、持っているすべてのオブジェクトをモックすることですべてをテストできると思いますが、これは非常に不器用なようです。誰かが上記のテストを書くのを手伝ってくれませんか、そして私はそれのチュートリアルを書いて喜んでいますか?

4

1 に答える 1

1

そのためにジャスミンを使用します。そのライブラリの使用にどれだけ精通しているかはわかりませんが、jQueryを使用して仕様テストを作成するためのプラグインがあり、フィクスチャ/テンプレートをロードしてテストを実行できます。

あなたの特定のケースでは、関数が MyObj 「クラス」の一部であると仮定すると、次のように記述します。

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();
   });

});
于 2012-02-13T23:18:43.927 に答える