2015-02-23 16 views
7

Ich versuche, Mocks für meine Login-Prozedur zu erstellen. Ich benutze die POST-Methode mit ein paar Feldern und Login-Objekt (mit Login, Passwort, etc.) Dafür verwende ich JsonPath. Code unten:Übereinstimmende Daten in JsonPath mit 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" 
    } 
} 

Ich überprüfe die clientVersion, weil es den Beispielen ähnlich ist.

Mein Problem ist, dass mit te JSON gegeben POST:

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

Ich erhalte 404. Allerdings, wenn ich

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

normal

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

alles funktioniert ändern Alles gut.

So - wie innerhalb von Wiremock überprüfen, mit matchesJsonPath wenn gegebenes Feld gleich einem Wert? Wie es in meinem Fall auf die root-Feld-Methode anwenden? Und während wir dabei sind - hatte ich ähnliche Probleme mit der Überprüfung, ob der Wert nicht null ist. Ich habe versucht, reguläre Ausdrücke und dergleichen anzuwenden - kein Glück.

Antwort

0

Versuch mit Doppelpunkten Operator (rekursiv) $ .. params [? (@. Clientversion == "1")]

2

Folge für mich gearbeitet.

"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

aktualisieren Wiremock. Es sollte mit neueren Versionen> = 2.0.0-beta funktionieren. Seine JsonPath Abhängigkeit war sehr veraltet (GitHub #261).

Die Verwendung des Doppelpunkt-Operators ist semantisch nicht gleich, da der Filter auch für Elemente mit dem gleichen Namen tiefer im Baum übereinstimmt.