我为我的合同测试套件使用了Pact宝石(并且非常喜欢!)。我要测试的API服务需要所有请求的授权令牌。如何针对需要身份验证令牌的API验证协议?
我知道如何为我的用户生成API令牌,但我不知道将令牌放置在Pact工作流中的哪个位置。我搜索了Pact文档和回购的例子,但没有任何运气。
我试着在消费者规范中发送一个POST来生成一个令牌,但是Pact mock服务器不知道如何处理请求和错误(正如我所期望的那样)。
我发现this example它看起来很有希望,特别是能够使用requestFilter
和addHeader
方法为所有请求分配预定义的标头。
我该如何使用Pact gem这样的请求过滤器?
如果这不是当前的功能,我有什么替代方案?
UPDATE:
J_A_X's answer的伟大工程,为创建与模拟服务器的协定,但它不能满足一个有效的身份验证令牌的API服务提供商的期望。更具体地说,我需要在运行pact:verify时动态地将有效的认证令牌插入到协议中。所以,更近一步,但仍需要弄清楚后一部分。
Matthew's answer包含对后面部分似乎有两种可能的解决方案(pact:verify)的提示。我不愿意引入另一个依赖项,所以我很想让ProxyApp类的例子工作。我不明白我究竟会传递给ProxyApp.new()。建议?
谢谢您的完整的答案!你的例子当然可以起作用,尽管它对我来说更像是一种解决方法。我希望有一种内置的方法可以让我用真正的认证令牌来验证协议。 – mycargus
好吧,你可以使用它们,但这里的问题是你现在必须知道在创建交互之前该令牌将会是什么,然后对它们进行测试。我不知道如何轻松创建流程,而不会以某种方式作弊,这基本上与此相同。 最后,问问你自己这个特定的交互检查在你的提供者的整体测试中是否真的非常重要。在我看来,这不是,因此我的正则表达式;对我来说重要的是业务API以正确的格式/类型返回数据。 –
您的方法非常适合与模拟服务器创建协议,但不符合API服务提供商对有效身份验证令牌的期望。更具体地说,我需要在运行pact:verify时动态地将有效的认证令牌插入到协议中。那有意义吗? – mycargus