2017-05-03 20 views
0

我有一個ruby協議模擬服務提供程序,它捕獲我的請求。我想提取請求中提供的確切值(通過Pact.term/Pact.like進行匹配),一旦請求被協約服務提供商回答,就會使用該值進行進一步處理。提取PACT中使用的確切值(當匹配通過正則表達式完成,因爲值最初不知道))

一個例子:密碼重置功能。代碼對郵件服務進行API調用,提供密碼重置鏈接作爲參數。 Pact捕獲請求併成功嘲笑它,驗證數據。我通過reset_link作爲參數之一(一個Json體)。這在Pact.term中得到匹配。都好。但是我也想恢復請求中使用的確切值(比如reset_link:'http://sample.com/reset-password?key=12345'),這樣我可以發出後續請求並檢查確切的鏈接是否確實允許成功的密碼重置。

現在,如果我直接發送電子郵件,這是很容易做到,我可以解析的Mail :: TestMailer.deliveries.last

我怎樣才能做到這一點?

我已經通過代碼,甚至創建一個Pact :: SomethingLike子類將無法正常工作,因爲比較方法是一個可愛的函數式編程模塊,而不是類中的方法。

有沒有前/後的鉤子,或抓取整個網絡請求的方法? PS:我知道這通常是由我使用的底層庫進行測試。圖書館批准調整功能的方式是重寫某些方法,我需要重新測試整個功能。

PPS:這不是導軌,而是roda。

感謝 安德烈

回答

1

我不知道,如果契約Ruby支持這個確切的要求,但是挖掘到爲什麼你這樣做,我建議這是一個壞主意。

這是一項功能測試,Pact有意識地使其難以支持。有關更多詳情,請參閱https://docs.pact.io/best_practices/contract_tests_not_functional_tests.html。對於這類測試,有更好的工具可用於工作,它們不屬於消費者代碼庫(它們絕對屬於提供者測試套件中的)。

契約是一個合同測試工具,因此只對單獨的請求/響應合同感興趣,而不是按功能測試鏈接的合約。