我正在测试我的graphql端点,它通过sequelize with Jest对数据库执行查询。但有时我发现我的测试文件有一种竞争条件。我的意思是,对于每个测试文件,我都有一个setup DB块,比如
beforeAll(async () => {
  await database.sequelize.sync({force: true})
  await database.User.create(user)
})因此,在测试文件中,我可以很容易地预测DB中的内容。有时这会导致每个测试文件都尝试执行.sync()的问题。一个测试文件将创建DB,而另一个将执行drop DB。
尽管我在所有的测试中都使用了await,但这看起来并不能保证测试文件会等待另一个测试完成。
要确保每个测试文件都能预测数据库中的内容,同时又不与其他测试冲突,最好的方法是什么?让测试等待其他测试完成,这真的是一个好主意吗?对我来说,这似乎并没有优化,因为运行整个测试套件需要更多的时间。
发布于 2020-03-24 02:37:22
您使用了多少工人?测试在同一测试文件内连续运行,但不能在不同的测试文件之间运行。
有许多选项可以尝试:1-为每个测试文件创建和使用唯一的DB。2-使它们都使用--runInBand标志串行运行。我不确定,但也许--maxWorkers=1也是这么做的。
https://stackoverflow.com/questions/45579694
复制相似问题