2015-02-23 18 views
7

Tôi đang cố gắng để tạo ra mocks cho thủ tục đăng nhập của tôi. Tôi sử dụng phương thức POST với một vài lĩnh vực và đối tượng đăng nhập (với đăng nhập, mật khẩu, vv) Cho rằng tôi đang sử dụng JsonPath. Mã bên dưới:dữ liệu Kết hợp trong JsonPath với 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" 
    } 
} 

Tôi đang kiểm tra clientVersion vì nó tương tự như ví dụ.

Vấn đề của tôi là, rằng với te POST JSON đưa ra:

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

tôi nhận được 404. Tuy nhiên, khi tôi thay đổi

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

lại bình thường

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

mọi thứ suôn sẻ bình thường.

Vì vậy, - làm thế nào để kiểm tra bên trong wiremock, sử dụng matchesJsonPath nếu có lĩnh vực tương đương với một số giá trị? Làm thế nào để áp dụng nó vào trường gốc như phương pháp trong trường hợp của tôi? Và trong khi chúng tôi đang ở đó - Tôi đã có vấn đề tương tự với việc kiểm tra nếu giá trị không phải là null. Tôi đã cố gắng áp dụng các biểu thức chính quy và như vậy - không may mắn.

Trả lời

0

thử với đôi chấm hành (recursive) $ .. params [? (@. ClientVersion == "1")]

2

Sau đây làm việc cho tôi.

"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

Cập nhật Wiremock. Nó sẽ hoạt động với các phiên bản mới hơn> = 2.0.0-beta. JsonPath sự phụ thuộc của nó đã rất lỗi thời (GitHub #261).

Sử dụng toán tử chấm đôi là ngữ nghĩa không giống nhau, như bộ lọc cũng sẽ phù hợp cho các yếu tố với cùng tên sâu xuống cây.

Các vấn đề liên quan