AJAX 呼叫测试数据的 Cucumber 测试已保存

Cucumber test for AJAX call testing data has been saved

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

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

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

如何让测试等到 AJAX 调用完成?

在检查数据库之前,您需要检查页面上是否有任何视觉变化表明数据已经 saved/ajax 已经完成。有时这是一条短信

expect(page).to have_text('Bug Updated!')

有时是旋转器消失

expect(page).not_to have_selector('.spinner')

等类似的内容可能应该是您 I enter selectized 步骤的最后一行。

注意:这个问题是在功能测试中进行直接数据库检查通常被认为是不好的代码味道(在请求规范等中有意义)的主要原因之一,您真的应该只检查显示的信息给用户。

您可以在特定时间内轮询预期结果,只有在指定时间范围内未获得预期结果时才会失败。

您可以等待 AJAX 使用 selenium JavascriptExecutor

示例:

public boolean isAjaxDone() {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    Object result = js.executeScript("return document.readyState");
    return result.equals("complete");
}