我想使用pact test来验证提供者是否可以在响应中提供图像。现在实际的响应看起来像这样 server response body which contains the picture
My Pact Json File看起来像这样
"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 :(得分:2)
这样做的方法是忽略身体,除非你真的想每次匹配确切的二进制文件,这在我看来会适得其反。
发送二进制文件时,它会发送相应的标题,就像您在“Content-Type”合同中已有的一样。你总是可以添加一个匹配的规则,身体必须在那里,但你只是不关心内容,但我不是肯定的,如果这甚至需要,因为你可以看看'Content-Length'标题并确保它大于0。
需要记住的是,Pact并不意味着用于匹配所有内容。它旨在匹配系统的关键部分和消费者的某些期望,即。作为消费者,我想调用这个应该给我一个图像的服务,但是我不关心那个图像是什么,因为我只是在DOM中显示它。如果您在测试时需要在消费者端提供实际图像,则可以使用匹配器查询通过使用正则表达式来解析任何内容,然后使用实际图像输出作为生成器。如果我是你,我会使用一些小的东西,因为Pact并不意味着喷出兆字节的二进制文件。
答案 1 :(得分:0)
我认为,仅标头检查就足够了。 (除非您想验证整个二进制内容,否则我认为不是最好的方法。)