我有一个网页,它进行AJAX调用以更新数据库中的数据。我想写一个黄瓜测试来输入页面上的数据,触发AJAX调用,然后验证数据是否保存在数据库中。
When I fill in selectized with "BP"
And I enter selectized
And Bug "222222" should have tag "BP"
但是,由于AJAX是异步的,因此在控制器完成数据创建之前,黄瓜正在测试该错误是否有标签。
如何在AJAX调用完成之前让测试等待?
答案 0 :(得分:1)
在检查数据库之前,您需要检查页面上的任何视觉变化是否表明数据已保存/ ajax已完成。有时候这是一条短信
expect(page).to have_text('Bug Updated!')
有时它是一个旋转器消失
expect(page).not_to have_selector('.spinner')
等。这样的事情可能应该是I enter selectized
步骤的最后一行。
注意:此问题是在功能测试中进行直接数据库检查通常被认为是代码异味(在请求规范中有意义等)的主要原因之一,您真的应该只检查显示的信息用户。
答案 1 :(得分:1)
您可以使用硒JavascriptExecutor
来等待AJAX
示例:
public boolean isAjaxDone() {
JavascriptExecutor js = (JavascriptExecutor) driver;
Object result = js.executeScript("return document.readyState");
return result.equals("complete");
}
答案 2 :(得分:0)
您可以在一定时间内轮询预期结果,只有在指定的时间范围内未达到预期结果时,才会失败。