问题 针对数据库的集成测试 - AVA


在编写单元测试之后,我面临集成测试,其中包括针对数据库(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。

如果测试同时共享相同的数据,我的测试可能会更新或删除可能导致误报的数据。

如果我正在编写的测试只是读取数据,我就可以像播种那样进行播种和清洁操作 pre 和 post 问题中提到的脚本 #311 并保持测试并行。

我也发现非常好,我可以使用的方式 t.context 并将用户/任务对象传递给我的测试。

是这个,我们被迫使用串行测试执行的罕见情况?

你会如何使用ava处理这种测试?


2314
2018-05-05 09:32


起源

您可以发布您的实际测试,以便我们可以看到您要测试的内容吗? - Adrian Lynch


答案:


是, test.serial 是为了这个。

或者,如果您可以为每个测试使用不同的数据库,那么您可以并行运行它们。


12
2018-05-13 09:16