2016-05-05 20 views
11

Nach dem Schreiben von Komponententests stehe ich vor Integrationstests, bei denen die Bibliothek gegen eine Datenbank getestet wird (rethinkdb).Integrationstests gegen eine Datenbank - AVA

Jeder Testfall muss unabhängig voneinander sein, und die Datenbank wird nach jedem Test gelöscht, so dass sie keine falschen positiven Ergebnisse liefern.

Da die AVA-Architektur Tests parallel ausführt, habe ich festgestellt, dass ich auf diese Weise keine positiven Tests erreichen kann. ex:

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(); 
}); 

ich die serielle Funktion zu verwenden gezwungen worden, jeder Test zu beenden und löschen Sie die DB in einer seriellen Art und Weise zu ermöglichen.

Meine Tests können Daten aktualisieren oder entfernen, die zu Fehlalarmen führen können, wenn der Test die gleichen Daten zur gleichen Zeit teilt.

Wenn die Tests, die ich schreibe sind nur Daten lesen, ich konnte den Betrieb der Aussaat nur und Reinigung ebenso pre und post Skript als #311 in der Frage erwähnt und die Tests parallel zu halten.

Ich fand auch sehr schön, wie ich die t.context verwenden und Benutzer/Aufgaben Objekte in meine Tests weiterleiten kann.

Ist dies der seltene Fall, dass wir gezwungen sind, eine serielle Testausführung zu verwenden?

Wie würden Sie diese Art von Tests mit Ava angehen?

+0

Können Sie Ihren eigentlichen Test veröffentlichen, damit wir sehen können, was Sie testen möchten? –

Antwort

12

Ja, test.serial ist dafür gedacht.

Alternativ können Sie für jeden Test eine andere Datenbank verwenden, die es Ihnen ermöglicht, sie parallel auszuführen.