使用场景大纲中的示例匹配每个对象

时间:2018-07-24 11:26:25

标签: karate

我发现使用* match each response.xyz超级强大,可以将对象结构测试与内容测试相结合。有没有办法将其与Examples表和<placeholder>一起使用?

我有类似的内容,我想在以下示例上使用“示例”表:

    * match each response.Services ==
  """
  { 
    "ServiceId" : #present, 
    "Name" : <Name>, 
    "Description" : #present, 
    "InActive" : <Inactive>, 
  }
  """
    Examples: 
  | ClientId | Name       | Status | ErrorCode | Inactive |
  |   400152 | "Foxtrot"  |    200 |         0 | false    |
  |   400152 | "Waltz"    |    200 |         0 | false    |

我知道

  "Services": [
{
  "ServiceId": 3,
  "Name": "Waltz",
  "Description": "Waltzing like Matilda",
  "InActive": false,
},
{
  "ServiceId": 4,
  "Name": "Foxtrot",
  "Description": "",
  "InActive": false,
},

返回作为回应。 显然,当我在Examples:中使用多行时,它会导致多个测试。

我要寻找的是针对预定义的值测试数组中的每个对象,但不知道它们将以什么顺序显示。并使用表产生的有序方法。

1 个答案:

答案 0 :(得分:1)

代替each,请尝试以下操作:

* match response.Services contains
  """
  { 
    "ServiceId" : #present, 
    "Name" : <Name>, 
    "Description" : #present, 
    "InActive" : <Inactive>, 
  }
  """

编辑:好的,替代方法。顺便说一句,我至少可以想到5种不同的方式:P

Scenario:
* table data
  | ClientId | Name       | Status | ErrorCode | Inactive |
  |   400152 | "Foxtrot"  |    200 |         0 | false    |
  |   400152 | "Waltz"    |    200 |         0 | false    |
* def expected = karate.map(data, function(x){ return { ServiceId: '#present', Name: x.Name, Description: '#present', InActive: x.Inactive} })
* match response.Services contains expected

EDIT2:如果您可以控制整个table

Scenario:
* table expected
| Name       | InActive | ServiceId  | Description |
| "Foxtrot"  | false    | '#present' | '#present'  |
| "Waltz"    | false    | '#present' | '#present'  |
* match response.Services contains expected