验证数组是否包含字符串的最简单方法是什么

时间:2018-11-06 14:55:09

标签: karate

我正在使用空手道测试用户搜索端点。它收到一个简单的json对象:

{
  "status" : ['ACTIVE', 'INACTIVE'],
  "activeDate" : '2017-11-27T17:51:13Z'
}

结果是在“ activeDate”之后创建的用户列表,其状态为ACTIVE或INACTIVE:

[ {
"name" : 'mike',
"status" : 'ACTIVE',
"date" : '2018-06-08T17:45:09Z'
},{
"name" : 'alice',
"status" : 'INACTIVE',
"date" : '2018-02-05T07:32:14Z'
}]

我想请您帮忙,为每种结果找到断言以下条件的最佳方法:

  • “状态”字符串结果是我过滤的状态之一。
  • “日期”在我过滤的日期之后。

我认为可以用一个简单的match each contains any来做,但是它不起作用,因为其中一个参数不是数组(它是一个简单的字符串)。另一个断言也发生类似的情况。

我发现的唯一解决方案是创建一个通用的javascript函数,该函数接收两个参数,一个是所有状态的数组(来自响应),另一个是带有状态搜索过滤器的数组。 然后,我可以在*断言步骤中使用此功能

我肯定有一个更简单的解决方案,但是我不知道该怎么做。有人可以帮我吗? 非常感谢。

1 个答案:

答案 0 :(得分:1)

您在这里:

* def payload = { "status" : ['ACTIVE', 'INACTIVE'], "activeDate" : '2017-11-27T17:51:13Z' }
* def response = 
"""
[
   {
      "name":"mike",
      "status":"ACTIVE",
      "date":"2017-11-27T17:51:13Z"
   },
   {
      "name":"alice",
      "status":"INACTIVE",
      "date":"2017-11-27T17:51:13Z"
   }
]
"""
* match response[*].status contains only payload.status
* match each response..date == payload.activeDate

提示:熟悉JsonPath!对于这些情况确实有帮助。

我将日期验证留给您做家庭作业,您可能需要执行一些字符串到日期的转换,请参考以下答案:https://stackoverflow.com/a/52892797/143475