以下は、私たちが使用するものと同様の例です。
var resetCollection = function(name) {
var Collection = this[name];
if (Collection)
// if the collection is already defined, remove its documents
Collection.remove({});
else
// define a new unmanaged collection
this[name] = new Mongo.Collection(null);
};
reset = function() {
var collections = ['Comments', 'Posts'];
// reset all of the collections
_.each(collections(function(name) {resetCollection(name);}));
// insert some documents
var postId = Posts.insert({title: 'example post'});
Comments.insert({postId: postId, message: 'example comment'});
};
Tinytest.add('something', function(test) {
reset();
var post = Posts.findOne();
var comment = Comments.findOne();
return test.equal(comment.postId, post._id);
});
各テストの開始時にreset
、データベースをクリーンアップして必要なコレクションを作成する を呼び出します。
実際のデータベースではなく、テスト データベースに対して実行するよう Meteor に指示するにはどうすればよいですか?
パッケージをテストすると、別のデータベースが作成されます。db パスを手動で指定する必要はありません。
そのテスト データベースにデータを簡単に入力するための最良の方法は何ですか?
上記の例は、いくつかの指針を示しているはずです。パッケージ間の競合を回避する最善の方法は、テストで管理されていないコレクションを使用することです (name = null
)。関数は、resetCollection
他のパッケージによってエクスポートされた管理コレクションの再定義を正しく回避する必要があります。詳細については、この質問も参照してください。