Mountebank使用错误的谓词并忽略contains中的值

问题描述

我尝试了他们的文档,但这非常“基础”,因此希望这里的人可以发现我的问题?我得到2个谓词,一个谓词使用错误用户一个谓词使用正确的用户用户的base64是通过post-body发送的,但是Mountebank的contains似乎只是忽略了它,而是选择了一个包含另一个包含值的谓词……为什么?

我的请求与dX...2g=

"body":"{\"auth\":\"dXNlcjpmYWxzY2g=\"}"

但是Mountebank将谓词与dX...Gln匹配:

using predicate match: [{
   "equals":{"method":"POST","path":"/new"},"contains":{"body":"{\"auth\":\"dXNlcjpyaWNodGln\""}
}]

包含不匹配,但仍在使用该谓词, 即使我的存根中确实包含匹配的谓词,也未使用:

{
  "path": "/new","predicates": [{
    "equals": {
      "method": "POST","path": "/new"
    },"contains": {
      "body": "{\"auth\":\"dXNlcjpyaWNodGln\""
    }
  }],"responses": [{
    "is": {
      "statusCode": 200,"body": {}
      }
    }
  }]
},{
  "path": "/new","contains": {
      "body": "{\"auth\":\"dXNlcjpmYWxzY2g=\""
    }
  }],"responses": [{
    "is": {
      "statusCode": 401,"body": {}
      }
    }
  }]
}

我的语法错误吗?它与第一个谓词匹配,即使它不包含dXNlcjpmYWxzY2g= 它确实可以使用equals起作用,我很好奇为什么contains不是这样。

解决方法

诀窍似乎是使用and,这很奇怪,但是解决方案是:

"predicates": [{
  "and": [
    { "equals": { "method": "POST","path": "/new" }},{ "contains": { "body": "{\"auth\":\"dXNlcjpyaWNodGln\"" }}
  ]
}],