与Jest的比赛条件

时间:2017-08-09 00:02:07

标签: unit-testing sequelize.js jestjs

我正在测试我的graphql端点,它通过Jest的sequelize对DB进行查询。但有时我发现我的测试文件有种竞争条件。我的意思是,对于每个测试文件,我都有一个设置DB块,例如

.sync()

这样在测试文件中我可以轻松预测数据库中的内容。有时,这会导致每个测试文件都尝试执行await的问题。一个测试文件将创建DB,而另一个测试文件执行drop DB。

即使我在测试中使用了 public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setMaxWidth(Integer.MAX_VALUE); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { ArrayAdapter<String> arrayAdapter = (ArrayAdapter<String>) mListNotes.getAdapter(); arrayAdapter.getFilter().filter(newText); return false; } }); ,但这并不能保证测试文件会等待另一个测试完成。

这里最好的方法是确保每个测试文件都可以通过使用干净的数据库来预测DB中的内容,同时不与其他测试冲突?测试等待其他人完成是否真的是一个好主意?它似乎没有对我进行优化,因为运行整个测试套件需要更多时间。

1 个答案:

答案 0 :(得分:1)

您正在使用多少个工人?测试在同一测试文件中串行运行,但不在不同测试文件之间运行。

可以尝试多种选择: 1-为每个测试文件创建和使用唯一的数据库。 2-使用--runInBand标志使它们全部连续运行。我不确定,但也许--maxWorkers=1也能做到。