2016-05-05 8 views
11

ユニットテストを書いた後、私はデータベース(rethinkdb)に対してライブラリをテストすることからなる統合テストに直面しています。データベースに対する統合テスト - AVA

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

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を完了してクリアできるようにするためにシリアル機能を使用することを余儀なくされて。

私のテストでは、同じデータを同時に共有していると誤検出の可能性があるデータが更新または削除されることがあります。

私は書いているテストは、単にデータを読んでいる場合、私はちょうど播種の操作を行うと、同じようにprepostスクリプトを清掃問題#311で述べたように並行してテストを保つことができます。

私はまた、t.contextを使用して、ユーザー/タスクオブジェクトをテストにパスする方法を見つけました。

私たちはシリアルテストの実行を余儀なくされることはまれですか?

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

+0

実際のテストを投稿して、テストしようとしていることを確認できますか? –

答えて

12

はい、これはtest.serialです。

また、テストごとに別のデータベースを使用して、並列で実行できるようにすることもできます。

関連する問題