在编写单元测试后,我面临着集成测试,其中包括测试库对数据库(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',{title: 'My task3',description: 'My duty3',]); }); test.afterEach(async (t) => { return await DB.clearDB(); });
我被迫使用串行功能来允许每次测试完成并以串行方式清除数据块.
我的测试可能会更新或删除数据,如果测试在同一时间共享相同的数据,可能会导致误报.
如果我正在写的测试只是读取数据,我可以按照#311号问题中提到的前脚本和后脚本进行播种和清理操作,并保持并行测试.
我也发现非常好,我可以使用t.context的方式将用户/任务对象传递到我的测试中.
这是一个,我们被迫使用串行测试执行的罕见情况?
你如何使用ava来处理这种测试?
解决方法
是的,test.serial是为了这个.
或者,如果您可以对每个测试使用不同的数据库,以允许并行运行它们.