2017-04-19 92 views
0

我有一個網關類的代碼,它向公司內部的API發出請求。我如何進行單元測試?我如何測試(使用RSpec)HTTP請求在Rails中發送(作爲單元測試的一部分)?

class XGateway < BaseGateway 
    self.target_url = ENV["X_URL"] 

    def activate(serial_number:, comment: nil) 
    expecting 204 do 
     connection.put do |req| 
     req.url "/api/v1/hw/#{serial_number}/activate" 
     req.params = { comment: comment } 
     end 
    end 
    end 

    def deactivate(serial_number:, comment: nil) 
    expecting 204 do 
     connection.put do |req| 
     req.url "/api/v1/hw/#{serial_number}/deactivate" 
     req.params = { comment: comment } 
     end 
    end 
    end 
end 

connection是法拉第請求對象和expecting是讓方法知道它預計,有效響應其狀態的方法。兩者都在XGateway繼承的BaseGateway中定義。

現在我需要做什麼來這裏測試

據我瞭解,每個方法(在單元測試的範圍是什麼?):

  • 測試,一個HTTP請求與發送正確的PARAMS
  • 檢驗正確的行爲時,希望滿足(具有響應狀態代碼204)
  • 檢驗正確的行爲沒有履行期待時(響應比204不同的狀態代碼)

但是,如何測試一個http請求已被髮送?

+0

您可以使用[WebMock](https://github.com/bblimke/webmock) –

回答

1

通常我使用VCR進行測試請求和響應。有了這個,你可以記錄你的代碼中的請求和響應。 VCR的主要目的是加速測試套件,並使其對第三方系統的更改更加穩健。

在您的情況下,您可以設置單元測試,將參數傳遞給activatedeactivate方法,並根據您對輸入的迴應進行測試。

你可以(雖然我不能推薦這個)解析請求url所在部分的vcr卡帶,並將其與你的期望相匹配。

相關問題