我需要集成的服务器返回其编码为JWT的答案。更糟糕的是,响应体实际上是一个json,形式如下:
{d: token} with token = JWT.encode({id: 123, field: "John", etc.})
我想对解码后的令牌内容使用pact验证。我知道我可以很容易地得到一个协议,验证我得到了{d:string},我不能对字符串做一个完全匹配(因为JWT包含一些不同的ID)。我想要的是以下内容,它假定添加了一个新的Pact.JWT功能。
my_provider.
upon_receiving('my request')
.with(method: :post,
path: '/order',
headers: {'Content-Type' => 'application/json'}
).will_respond_with(
status: 200,
headers: {'Content-Type' => 'application/json; charset=utf-8'},
body: {
d: Pact::JWT( {
id: Pact.like(123),
field: Pact.term(generate: "John", matcher: /J.*/
},signing_key,algo
)
})
如果没有添加这个Pact :: JWT,有没有办法实现这种结果呢?
我已经在使用pact代理来运行我的验证。我知道您可以在发送请求之前修改请求(How do I verify pacts against an API that requires an auth token?)。从代理服务器收到请求后,您可以修改请求吗?
如果是这种情况,我可以计划以下工作:
我的代码是红宝石。我无权访问提供商。
任何建议表示赞赏!感谢
答案 0 :(得分:1)
您可以使用(另一个)代理应用修改请求或响应。
class ProxyApp
def initialize real_provider_app
@real_provider_app = real_provider_app
end
def call env
response = @real_provider_app.call(env)
# modify response here
response
end
end
Pact.service_provider "My Service Provider" do
app { ProxyApp.new(RealApp) }
end
答案 1 :(得分:0)
契约作为一种工具,我不希望它能立即提供这种行为。
我认为最好的是