2

(これは、この質問に似ています: How to setup separate test and development database in meteorですが、これは 2 年前のもので、それ以来 meteor は大きく変化しています。)

独自のパッケージを作成しようとしていますが、単体テストを実行したいと考えています。クエリが正しいことを確認したいので、関数をスタブ化するだけでなく、実際にテスト データベースに対してクエリを実行したいと考えています。

2 つの質問があります。

  • 実際のデータベースではなく、テスト データベースに対して実行するよう Meteor に指示するにはどうすればよいですか?
  • そのテスト データベースにデータを簡単に入力するための最良の方法は何ですか?

理想的には、テスト データベースにデータを入力するよりもクリアするセットアップ手順を実行することで、それぞれのデータベースに含まれるデータを常に正確に把握できます。

私は Tinytest の初心者なので (他の単体テスト フレームワークを使用したことはありますが)、コード サンプルは大歓迎です。

4

1 に答える 1

3

以下は、私たちが使用するものと同様の例です。

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他のパッケージによってエクスポートされた管理コレクションの再定義を正しく回避する必要があります。詳細については、この質問も参照してください。

于 2015-04-21T18:27:55.940 に答える