已保存用于AJAX呼叫测试数据的黄瓜测试

时间:2018-06-18 14:46:05

标签: cucumber capybara race-condition

我有一个网页,它进行AJAX调用以更新数据库中的数据。我想写一个黄瓜测试来输入页面上的数据,触发AJAX调用,然后验证数据是否保存在数据库中。

When I fill in selectized with "BP"
And  I enter selectized
And  Bug "222222" should have tag "BP"

但是,由于AJAX是异步的,因此在控制器完成数据创建之前,黄瓜正在测试该错误是否有标签。

如何在AJAX调用完成之前让测试等待?

3 个答案:

答案 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)

您可以在一定时间内轮询预期结果,只有在指定的时间范围内未达到预期结果时,才会失败。