После написания модульных тестов я сталкиваюсь с тестами интеграции, которые состоят в тестировании библиотеки по базе данных (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();
});
Мне пришлось использовать функцию serial, чтобы каждый тест заканчивался и очищал БД последовательным образом.
Мои тесты могут обновлять или удалять данные, которые могут вызывать ложные срабатывания, если в тесте одновременно используются одни и те же данные.
Если тесты, которые я пишу, просто читают данные, я могу просто выполнить операцию посева и очистки так же, как pre
и post
script, как упоминалось в выпуске # 311 и параллельно проверяйте тесты.
Я также нашел очень приятным, как я могу использовать t.context
и передавать объекты пользователей/задач в свои тесты.
Это тот, редкий случай, когда мы вынуждены использовать серийное тестирование?
Как бы вы справились с такими испытаниями, используя ava?