代码之家  ›  专栏  ›  技术社区  ›  Marlin Pierce

已保存针对ajax调用测试数据的cucumber测试

  •  0
  • Marlin Pierce  · 技术社区  · 7 年前

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

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

    但是,由于ajax是异步的,cucumber正在测试bug是否有一个标记 之前 控制器已完成数据创建。

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

    3 回复  |  直到 7 年前
        1
  •  1
  •   Royg    7 年前

    您可以使用selenium等待ajax JavascriptExecutor

    例子:

    public boolean isAjaxDone() {
        JavascriptExecutor js = (JavascriptExecutor) driver;
        Object result = js.executeScript("return document.readyState");
        return result.equals("complete");
    }
    
        2
  •  1
  •   Thomas Walpole    7 年前

    在检查数据库之前,您需要检查页面上显示数据已保存/ajax已完成的任何可视更改。有时候那是一条短信

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

    有时它是一个旋转器消失了

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

    诸如此类的事情可能是你 I enter selectized 步骤。

    注意:这个问题是在特性测试中执行直接db检查通常被认为是一种糟糕的代码味道(在请求规范中是有意义的,等等)的主要原因之一,您应该只检查显示给用户的信息。

        3
  •  0
  •   Marit    7 年前

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