我需要集成的服务器返回其编码为 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,有没有办法实现这种结果?
我已经在使用协议代理来运行我的验证。我知道您可以在发送请求进行验证之前修改请求(如何针对需要身份验证令牌的 API 验证协议?)。从代理服务器收到请求后,您可以修改请求吗?
如果是这种情况,我可以计划以下工作:
- 我的实际代码中的一个开关,有时期望答案被解码而不是在 JWT 中
- 在关闭开关的情况下运行我的测试一次(正常的代码行为,模拟返回 JWT 编码的数据。
- 在关闭开关的情况下再次运行我的测试(代码期望数据已经解码,模拟返回解码数据。)
- 使用第二次运行的合同 json
- 挂钩到 proxy:verify 任务以即时解码 JWT,并使用现有的协议机制进行验证。(这一步我不知道怎么做)。
我的代码是红宝石。我无权访问提供商。
任何建议表示赞赏!谢谢