2011-09-25 10 views
15

私は、Nodeアプリケーションの一部の単体テストを作成しようとしています。私はORMにMongooseを使用しています。Mongoose Node.JS appのテスト

私はMongooseとNodeでテストを行う方法について集団を検索しましたが、何も付属していません。ソリューション/フレームワークはすべて完全なスタックであるとか、嘲笑的なことは言及していないようです。

私のテストで静的なデータを返すことができるように私のモンゴースDBを模擬する方法はありますか?私はむしろテストDBを設定し、それにすべてのユニットテストのためのデータを入力する必要はありません。

他に誰かがこれに遭遇しましたか?

答えて

6

私のコードを少し構成することでこれを解決しました。私は、 "save"、 "find"、 "delete"などのAPIを使用して、すべての自分のmongoose関連のものを別々のクラスに保ちますが、他のクラスはデータベースに直接アクセスしません。次に、データに依存しているテストでそれらを模擬します。

返される実際のオブジェクトと同様のことをしました。私がモンゴースで持っているすべてのモデルについて、私はそれを包む対応するクラスを持ち、フィールドへのアクセスメソッドを提供します。それらも簡単に嘲笑されます。

+11

コードの例がありますか? – bouncingHippo

8

私はあまりにも答えを探しに行き、ここで終わりました。これは私がやったことです:

私はmockeryを使い始めました。私のモデルが入っていたモジュールをモックアウトしました。これらのプロパティは実際のモデルをラップしました(テストするコードの子プロパティが存在するように)。そして、私はsaveのようなテストのために操作したいメソッドをオーバーライドします。これは嘲笑を取り消すことができる嘲笑の利点を持っていました。

けど...

私は本当にすべてのモデルのラッパーのプロパティを記述するためにモックの取り消しについて十分に気にしません。今はモジュールを必要とし、操作したい関数をオーバーライドするだけです。おそらく別のプロセスでテストを実行することになります。また

// mock out database saves 
var db = require("../../schema"); 
db.Model1.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback(); 
}; 
db.Model2.prototype.save = function(callback) { 
    console.log("in the mock"); 
    callback("mock staged an error for testing purposes"); 
}; 
+0

NodeJSでこれを行いましたか? – bouncingHippo

+0

'schema.js'には何がありますか? – Michelle

+0

@MichelleおそらくMongooseスキーマの定義 – sshow

6

言及する価値がある: - マングースを皮肉っインメモリDB、テスト目的のために
mockgoose私のテストの手配一部で


monckoose - 類似していますが、別のアプローチを採用しています(偽のドライバを実装しています)。 Monckooseは2015年3月現在未発表のようです。

+0

あなたの2番目のリンクは死んでいますが、未公開です。 –

+0

@KevinBありがとう、更新済み –

関連する問題