2017-01-18 3 views
1

У нас есть тест провайдера, который терпит неудачу только на Jenkins, что мешает мне отлаживать.Почему этот тест поставщика pact-jvm терпит неудачу?

Вот некоторые соответствующие журналы из Дженкинс:

Error Message 

0 - $.body.2 -> Expected name='FXUHHqWrZZcodhHBmeLf' but was missing 


0) a request to get all clients returns a response which has a matching body 
     $.body.2 -> Expected name='FXUHHqWrZZcodhHBmeLf' but was missing 

     Diff: 

(некоторые пропуски ...)

@10 
      ], 
    -  "id": "c53927c3-0d1c-48a8-8f0a-7560be89daa5", 
    -  "name": "FXUHHqWrZZcodhHBmeLf", 
    +  "id": "9daaad0a-8a2d-4e73-a963-fa1625cec110", 
    +  "name": "name", 
    +  "privileges": [ 
    +   "CHECK_TOKEN", 
    +   "MANAGE_CLIENT", 
    +   "MANAGE_IDP", 
    +   "MANAGE_USER" 
    +  ], 
      "redirectUris": [ 

И взаимодействие выглядит в файле пакте:

{ 
     "description": "a request to get all clients", 
     "request": { 
      "method": "GET", 
      "path": "/some/url/client" 
     }, 
     "response": { 
      "status": 200, 
      "headers": { 
       "Content-Type": "application/json; charset=UTF-8" 
      }, 
      "body": [ 
       { 
        "accessTokenValiditySeconds": 42721462, 
        "allowedScopes": [ 
         "JnTfAlnHKVSDzoWnUqZv" 
        ], 
        "autoApprove": true, 
        "grantTypes": [ 
         "VfWudsTQINERQCnVKvoK" 
        ], 
        "id": "c53927c3-0d1c-48a8-8f0a-7560be89daa5", 
        "name": "FXUHHqWrZZcodhHBmeLf", 
        "redirectUris": [ 
         "vWxSTjgJQvwUtwphDGcn" 
        ], 
        "refreshTokenValiditySeconds": 12393550, 
        "secretRequired": true 
       } 
      ], 
      "matchingRules": { 
       "$.body[*].allowedScopes[*]": { 
        "match": "type" 
       }, 
       "$.body[*].redirectUris[*]": { 
        "match": "type" 
       }, 
       "$.body[*].grantTypes[*]": { 
        "match": "type" 
       }, 
       "$.body[*].redirectUris": { 
        "min": 0, 
        "match": "type" 
       }, 
       "$.body[*].autoApprove": { 
        "match": "type" 
       }, 
       "$.body": { 
        "min": 1, 
        "match": "type" 
       }, 
       "$.body[*].id": { 
        "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" 
       }, 
       "$.body[*].accessTokenValiditySeconds": { 
        "match": "integer" 
       }, 
       "$.body[*].secretRequired": { 
        "match": "type" 
       }, 
       "$.body[*].refreshTokenValiditySeconds": { 
        "match": "integer" 
       }, 
       "$.body[*].name": { 
        "match": "type" 
       }, 
       "$.body[*].allowedScopes": { 
        "min": 0, 
        "match": "type" 
       }, 
       "$.body[*].grantTypes": { 
        "min": 0, 
        "match": "type" 
       } 
      } 
     }, 
     "providerState": "the 'zero' client exists" 
    }, 

I 'm под впечатлением, что имя должно соответствовать типу вместо точного значения, и появляется t в поле diff есть поле «name».

Почему этот тест не работает?

редактировать:

Это код для получения фрагмента пакт:

  builder 
      .given("the 'zero' client exists") 
      .uponReceiving("a request to get all clients") 
      .path("/some/url/client") 
      .method("GET") 
      .willRespondWith() 
      .status(200) 
      .body(PactDslJsonArray 
        .arrayMinLike(1) 
        .uuid("id") 
        .booleanType("secretRequired") 
        .eachLike("allowedScopes", stringType()) 
        .eachLike("grantTypes", stringType()) 
        .eachLike("redirectUris", stringType()) 
        .integerType("accessTokenValiditySeconds") 
        .integerType("refreshTokenValiditySeconds") 
        .booleanType("autoApprove") 
        .stringType("name") 
        .closeObject()) 
      .toFragment(); 
+0

Я помню, что там был особый случай, когда корневой объект в ответе JSON представляет собой массив, где требуется разный помощник. Вы пробовали «arrayEachLike», как описано в https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-consumer#root-level-arrays-that-match-all-items-version-2211. ? –

+0

@MatthewFellows Я использую ArrayMinLike. Фрагмент доступен здесь: https://gist.github.com/cah-andrewfitzgerald/c537aadc8fc600b3ba56ee452e5867ae – Fitzoh

ответ

3

Важный бит информации в журналах является «но не хватает» бит. Кажется, что в третьем элементе массива (совпадающем с «$ .body.2») отсутствует атрибут name.

Можете ли вы дважды проверить полный ответ, и если в третьем элементе есть атрибут имени, то можете ли вы поднять вопрос на https://github.com/DiUS/pact-jvm.

+0

https://github.com/DiUS/pact-jvm/issues/370 – Fitzoh