我爲我的合同測試套件使用了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