2017-04-19 2 views
0

私はこのコードをGatewayクラスで取得しています。ゲートウェイクラスは、社内の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カセットを解析して期待通りのものにすることができます(これはお勧めできませんが)。

関連する問題