12

単体テストを作成した後、ライブラリをデータベース (rethinkdb) に対してテストする統合テストに直面しています。

各テストケースは互いに独立している必要があり、データベースは各テスト後にクリアされるため、誤検知が発生しません。

AVAアーキテクチャはテストを並行して実行するため、その方法ではポジティブなテストを達成できないことがわかりました。元:

test.beforeEach(async function(t) {

  const users = t.context.users = await DB.models.User.save([
    {name: 'jhon',username: 'doe'},
    {name: 'fabri',username: 'fenos'},
    {name: 'will',username: 'red'},
    {name: 'smith',username: 'blue'},
    {name: 'paul',username: 'orange'},
    {name: 'tesla',username: 'ele'},
  ]);

  t.context.tasks = await DB.models.Task.save([
    {title: 'My task1', description: 'My duty1', assignee_id: _.sample(users).id},
    {title: 'My task2', description: 'My duty2', assignee_id: _.sample(users).id},
    {title: 'My task3', description: 'My duty3', assignee_id: _.sample(users).id},
  ]);
});

test.afterEach(async (t) => {
  return await DB.clearDB();
});

シリアル関数を使用して、すべてのテストを終了し、DB を順次クリアできるようにする必要がありました。

テストで同じデータを同時に共有すると、テストでデータが更新または削除され、誤検知が発生する可能性があります。

私が書いているテストがデータの読み取りだけである場合、問題#311preで述べたようにシードとクリーニングの操作とpostスクリプトを実行し、テストを並列に保つことができます。

t.contextまた、ユーザー/タスクオブジェクトを使用してテストに渡す方法も非常に優れていることがわかりました。

これは、シリアル テスト実行を使用せざるを得ないまれなケースですか?

ava を使用して、この種のテストにどのように取り組みますか?

4

1 に答える 1

14

はい、test.serialこのためのものです。

または、テストごとに異なるデータベースを使用して、それらを並行して実行できる場合。

于 2016-05-13T09:16:36.957 に答える