关于空手道:验证数组是否包含字符串的最简单方法是什么

what is the easiest way to validate that an array contains a string

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

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

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

1
2
3
4
5
6
7
8
9
[ {
"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 函数,它接收两个参数、一个包含所有状态的数组(来自响应)和另一个带有状态搜索过滤器的数组。
然后我可以在 * assert step

中使用这个函数

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


给你:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
* 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