2012-12-04 51 views
0

考慮一個Rails應用程序,該應用程序正在與Rails應用程序分開開發的(Sinatra應用程序)API。我想從Rails測試中測試一個API調用。如何測試Rails HTTP請求到Sinatra應用程序?

的API代碼:

post '/foo/create' do 
    ... 

我創建了一個模擬,但沒有任何意義,因爲它只是一個API的文件的副本。臭死了。

可以在測試中要求API文件。但是如何從RSpec調用它? Rails應用程序中沒有路線。

一種選擇是啓動API,並從Rails的測試HTTP調用,但這是臭的原因是:

  1. 你必須要對API服務器運行Rails的測試
  2. 爲什麼要Rails測試發出HTTP請求? Rack :: Test模擬了這一點。
  3. 我不認爲這將工作,因爲這些應用程序有不同的測試數據庫,但共享相同的生產數據庫。

編輯:測試的要點是API調用創建Rails應用程序所期望的記錄。所以Rails應用程序需要在API調用完成後測試數據庫的狀態。

+1

你是什麼意思「創建一個模擬」? [webmock](https://github.com/bblimke/webmock)是這類事情的絕佳工具,特別是與[vcr](https://github.com/vcr/vcr)配對時。 – willglynn

+0

通過「創建一個模擬」我的意思是添加了代碼,API將在運行HTTP請求時運行。 –

回答

1

好吧。對你來說最完美的答案就是模擬像webmock這樣的答案。它會在訪問該網址時做出迴應,因此在測試中,您的應用會以真實的方式提出申請,只有在它打到網絡之前,它纔會觸發您的模擬並回復所需的答案。

+0

webmock不會做我想做的事(因爲我沒有測試HTTP調用或響應)。但是這給了我一個想法:我需要一種不同類型的webmock。它接受HTTP請求,並在Rails測試數據庫上運行API代碼。我想知道是否有這樣的寶石,或者如果有一個簡單的方法來做到這一點...... –

+1

所以你想要使用這兩個項目的集成測試?兩個項目是否使用相同的數據庫? –

+2

B七,如果你沒有測試HTTP調用或響應,你能澄清一下你想測試什麼嗎? – sunnyrjuneja

相關問題