主张大动态响应

时间:2019-04-25 23:10:38

标签: karate

我想对一个很大的响应数组进行断言,但不知道顺序。我有一个具有预期响应值的变量,因此可以进行一次巨型比较,但是我无法加载整个响应并将其与整个预期响应变量同时进行比较。

* def obligationsQuery = Java.type("tests.account.sql.Obligations").getObligations(division, account)
    * def getObligations = db.readRows(obligationsQuery)

    Given path "account", "v1", "accounts", systemId, "obligations"
      And header api-key = gatewayKey
    When method GET
    Then status 200
      And match $.data != null
      And match $.data[*].transactionType contains any "<transactionTypeResponse>"
      And match $.data[*] contains only getObligations

    Examples:
      | description | transactionType | transactionTypeResponse |
      | Invoice     | 001             | invoice

我得到的错误是:

get_obligations_collection.feature:49 - path: $.data[*][*], actual: [{"object1"}, {"object2"}, {"etc"}], expected: {"object1"}, reason: actual value does not contain expected

我也尝试过: And match each $.data[*] contains only getObligations 但是我得到了:

get_obligations_collection.feature:49 - path: $[0], actual: [{"object1"}, expected: [{"object1"}, {"object2"}, {"etc"}, reason: actual value is not list-like

2 个答案:

答案 0 :(得分:0)

我假设$.data是一个JSON数组,因此无需使用json-path通过以$.data[*]的方式再次将数据获取到另一个数组中。

所以

And match $.data contains only getObligations

应该工作。

如果仍然无法执行,请提供适当的responsegetObligations值以进行进一步调查。

答案 1 :(得分:0)

我假设contains only将显示变量的完整值,但是很聪明,它仅显示与api响应对象不匹配的对象。能够通过更简单的断言来验证这一点,然后检查错误消息,发现ID缺少API添加的填充,而DB没有。

和往常一样,只需更仔细地查看返回的数据即可提供简单的解释。