2015-02-23 6 views
7

Я пытаюсь создать mocks для моей процедуры входа. Я использую метод POST с несколькими полями и объектом входа (с логином, паролем и т. Д.) Для этого я использую JsonPath. Код ниже:Соответствующие данные в JsonPath с wiremock

{ 
"request": { 
     "method": "POST", 
     "url": "/login", 
     "bodyPatterns" : [ 
       {"matchesJsonPath" : "$.method"}, 
       {"matchesJsonPath" : "$.params[?(@.clientVersion == "1")]"}, 
       {"matchesJsonPath" : "$.params.login"}, 
       {"matchesJsonPath" : "$.params.password"} 
     ] 
    }, 
    "response": { 
      "status": 200, 
      "bodyFileName": "login.json" 
    } 
} 

Я проверяю clientVersion, потому что это похоже на примеры.

Моя проблема в том, что с тэ данной JSON POST:

{ 
    "method": "login", 
    "params": { 
     "clientVersion": "1", 
     "login": "[email protected]", 
     "password": "681819535da188b6ef2" 
    } 
} 

Я получаю 404. Однако, когда я изменяю

{"matchesJsonPath" : "$.params[?(@.clientVersion == "1")]"}, 

нормальным

{"matchesJsonPath" : "$.params.clientVersion"}, 

все работает просто хорошо.

Итак - как проверить внутри wiremock, используя matchJsonPath, если заданное поле равно некоторому значению? Как применить его к корневому полю, например, в моем случае? И пока мы на нем - у меня были схожие проблемы с проверкой, не имеет ли значение значение null. Я пытался применять регулярные выражения, и это - не повезло.

ответ

0

попытка с двойным оператора точки (рекурсивный) $ .. PARAMS [? (@. ClientVersion == "1")]

2

Вслед работал для меня.

"matchesJsonPath" : "$.rootItem.itemA[0].item..[?(@.fieldName=='file')]"

Json:

{ 
    "rootItem" : { 
      "itemA" : [ 
       { 
       "item" : { 
        "fieldName" : "file", 
        "name" : "test" 
       } 
       } 
      ] 
    } 
} 

Wiremock

{ 
    "request" : { 
    "urlPattern" : "/testjsonpath", 
    "method" : "POST", 
    "bodyPatterns" : [ { 
     "matchesJsonPath" : "$.rootItem.itemA[0].item..[?(@.fieldName=='file')]" 
    } ] 
    }, 
    "response" : { 
    "status" : 200, 
    "body" : "{\"result\": \"success\"}", 
    "headers" : { 
     "Content-Type" : "application/json" 
    } 
    } 
} 
2

Update Wiremock. Он должен работать с более новыми версиями> = 2.0.0-бета. Его зависимость JsonPath была очень устаревшей (GitHub #261).

Использование оператора двойной точки семантически не совпадает, так как фильтр также будет соответствовать элементам с тем же именем, что и глубже по дереву.

 Смежные вопросы

  • Нет связанных вопросов^_^