首页 > 解决方案 > 匹配空手道中的每个项目

问题描述

我想断言总价格大于等于 price_net。你能告诉我我怎样才能正确地做到这一点吗?这就是我在atm所做的。

Scenario: Testing

* def response =

"""
{
  "prices": [
    { "price_net":"10.50", "price_gross":"12.25" },
    { "price_net":"10.50", "price_gross":"12.25" },
    { "price_net":"10.50", "price_gross":"12.25" },
    { "price_net":"10.50", "price_gross":"12.25" },
    { "price_net":"10.50", "price_gross":"12.25" },
    { "price_net":"10.50", "price_gross":"12.25" }
   ]
}

"""

* match each response.prices[*].price_gross == '#? _ >= 0 && _ >= response.prices[*].price_net'

我认为断言语句中的“*”是问题所在。因为当我运行这个

* match response.prices[0].price_gross == '#? _ >= 0 && _ >= response.prices[0].price_net'

它工作正常。请建议。提前致谢。

标签: karate

解决方案


示例代码:

Feature: Validation

  Scenario: Validation

    * def diff =
      """
      function (A, B) {

      var C = [];
      for(var i = 0; i < A.length; i++) {
      C.push(parseFloat(A[i]) - parseFloat(B[i]));
      }
      return C;
      }
      """

    * def response =
      """
      {
        "prices": [
          { "price_net":"10.50", "price_gross":"12.25" },
          { "price_net":"10.50", "price_gross":"12.25" },
          { "price_net":"10.50", "price_gross":"12.25" },
          { "price_net":"10.50", "price_gross":"12.25" },
          { "price_net":"10.50", "price_gross":"12.25" },
          { "price_net":"10.50", "price_gross":"12.25" }
        ]
      }
      """
    * json temp = response
    * def pgarr = get temp.prices[*].price_gross
    * def pnarr = get temp.prices[*].price_net
    * def sub = diff(pgarr,pnarr)
    * match each sub == '#? _ >= 0'

推荐阅读