2017-02-23 68 views
0

我使用RESTClient實現寶石打造的API客戶端和對API的調用都通過這種方法在這裏RSpec測試RestClient :: Request.execute:任何方式查看請求?

def call(api_name,api_endpoint,token = nil,*extra_params) 
    endpoint = fetch_endpoint(api_name,api_endpoint) 
    params = {} 
    endpoint['params'].each_with_index { |p,i| params[p] = endpoint['values'][i] } 
    puts params 
    if token.nil? then 
     response = RestClient::Request.execute(method: endpoint['method'], url: endpoint['url'], params: params.to_json) 
    else 
     response = RestClient::Request.execute(method: endpoint['method'], url: endpoint['url'], headers: {"Authorization" => "Bearer #{token}"}, params: params.to_json) 
    end 
    response 
    end 

正如你可以看到,我要做的就是安裝帶參數/值的散列呼叫處理並調用RestClient::Request#execute得到迴應。

它發生了一些我的測試中,像這樣的

it 'request_autorization' do 
    obj = SpotifyIntegration.new 
    response = obj.call('spotify','request_authorization',nil,state: obj.random_state_string) 
    myjson = JSON.parse(response.body) 
    expect(myjson).to eq({}) 
end 

被返回400 Bad request錯誤,我真的不知道爲什麼。其他測試,像這樣一個

it 'my_playlists (with no authorization token)' do 
    obj = SpotifyIntegration.new 
    expect { 
    response = obj.call('spotify','my_playlists') 
    }.to raise_error(RestClient::Unauthorized,'401 Unauthorized') 
end 

處理相同的方法,運行非常好。

有沒有辦法看到發送的請求?我的意思是,看看RestClient是如何掛載/發送我的請求到相應的API?可能是這樣,我可以理解發生了什麼。

通過「查看請求」我的意思是這樣

puts RestClient::Request.prepared_request 

puts RestClient::Request.prepared_url 

我搜索的RESTClient實現文檔,沒有發現任何類似的,但也許一些你知道該怎麼做這個。

+0

是否'.new'代替'.execute'給你一些你可以使用的東西?只是猜測基於文檔[這裏](http://www.rubydoc.info/gems/rest-client/RestClient/Request#initialize-instance_method) –

+0

我要檢查。確實有一些可能性。謝謝! –

+0

您可以嘗試使用'RestClient.log'獲取更多信息,或者使用WebMock測試您是否看到您希望生成的Web請求。 – alberge

回答

1

您可以嘗試使用RestClient.log以獲取更多信息。例如:

RestClient.log = STDOUT 

WebMock也是一個很好的HTTP請求測試框架。 Rest-Client測試本身對WebMock有很大的用處。