2016-12-14 53 views
1

我想使用pact測試來驗證提供者是否可以在響應中提供圖片。現在實際的響應看起來像這樣 server response body which contains the picture如何驗證映像中包含的響應通過協議測試

我的契約JSON文件看起來像這樣

"interactions": [ 
 
    { 
 
     "providerState": "there's a user has a portrait tiger.png", 
 
     "description": "Get the user's portrait", 
 
     "request": { 
 
     "method": "GET", 
 
     "path": "/api/Employees/v1/Employee/106656048406528/Attachments", 
 
     "headers": { 
 
      "Content-Type": "application/json", 
 
      "X-Employee-ID": "106656048406528", 
 
      "X-Tenant-ID": "26663977872256", 
 
      "X-User-ID": "1333" 
 
     } 
 
     }, 
 
     "response": { 
 
     "status": 200, 
 
     "headers": { 
 
      "Content-Type": "image/jpeg;charset=UTF-8" 
 
     }, 
 
     "body": "iVBORw0KGgoAAAANSU", 
 
     "matchingRules": { 
 
      "$.body": { 
 
      "match": "type" 
 
      } 
 
     } 
 
     } 
 
    } 
 
    ],

的協議測試總是失敗,並說身體不匹配。我可以理解實際的響應不是base64格式,也不是字符串。它應該有一些二進制文件。在這種情況下,如何編寫匹配規則來驗證它是二進制文件?

+0

您正在使用哪種語言? JVM,Ruby,JS ...? –

回答

2

要做到這一點的方法是忽略身體,除非你真的想每次匹配確切的二進制文件,這在我看來是反效果的。

當發送一個二進制文件時,它確實發送了適當的頭文件,就像您在'Content-Type'合同中已經有的一樣。你總是可以添加一個匹配的規則,該規則必須在那裏,但是你不關心內容,但是如果甚至需要這個內容,我不積極,因爲你可以看一下'Content-Length'頭部並確保它大於0.

需要記住的是Pact並不意味着用於匹配的所有內容。它旨在匹配系統的關鍵部分和消費者的某些期望,即。作爲一個消費者,我想調用這個應該給我一個圖像的服務,但我不在乎那個圖像是什麼,因爲我只是在DOM中展示它。如果您需要在測試時向消費者提供實際圖像,則可以使用匹配程序查詢通過使用正則表達式來解析任何內容,然後作爲生成器使用實際的圖像輸出。如果我是你的話,我會使用一些小的東西,因爲Pact並非完全意味着要噴出兆字節的二進制文件。