【发布时间】:2019-04-01 04:45:24
【问题描述】:
我需要集成的服务器返回其编码为 JWT 的答案。更糟糕的是,响应正文实际上是一个 json,格式为:
{d: token} with token = JWT.encode({id: 123, field: "John", etc.})
我想对解码令牌的内容使用协议验证。我知道我可以轻松地签订协议来验证我是否返回了 {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,有没有办法达到这种效果?
我已经在使用协议代理来运行我的验证。我知道您可以在发送验证之前修改请求 (How do I verify pacts against an API that requires an auth token?)。从代理服务器收到请求后,您可以修改请求吗?
如果是这样,我可以计划以下工作:
- 我的实际代码中的一个开关,有时期望答案被解码而不是在 JWT 中
- 在关闭开关的情况下运行我的测试一次(正常的代码行为,模拟返回已编码的 JWT 数据。
- 在关闭开关的情况下再次运行我的测试(代码期望数据已经解码,模拟返回解码数据。)
- 使用第二次运行的合同 json
- 挂钩代理:验证任务以即时解码 JWT,并使用现有协议机制进行验证。 (我不知道该怎么做的步骤)。
我的代码是 ruby 的。我无权访问提供商。
任何建议表示赞赏!谢谢
【问题讨论】: