2013-07-10 66 views
1

嗨我的控制器中有以下查詢,我想編寫Rspec規範。我對Rspec是新手,我不知道如何編寫規範。請幫助如何爲以下查詢編寫Rspec規範

table1.includes(:table2).where(table1: {id: params[:id]}).includes(:table3) 

我也嘗試調查模擬和存根(stub),但我不明白如何使用它們來查詢這樣的查詢。

謝謝

+2

你想要測試什麼? –

+0

您是否想要測試它在特定時間內運行,它是否「正確」並返回預期結果或其他內容?在我們提供幫助之前,你需要知道你想測試什麼。 – jefflunt

+0

@ChrisHeald,Normalocity - 我想確保查詢返回所需的結果。 – rajkumarts

回答

1

當面對這些問題時,我傾向於將查詢封裝在方法中。這樣,您就可以簡單地將數據存入方法中,而不用擔心數據衛生問題。

例如:

awesome_model = stub_model(Table1, fetch_table1_results: [1, 2, 'etc']) # You should include models, stubs, or mocks here. 

至於測試:

def fetch_table1_results(id) 
    table1.includes(:table2).where(table1: {id: id}).includes(:table3) 
end 

在這一點上,你可以在你需要測試依賴於它的東西,踩滅的方法實際的方法,我不知道你需要。該方法鏈中沒有很多有趣的部分。如果你想成爲完整的,這裏的情況:

  • 確保fetch_table1_results調用帶有ID Table1.find的任何實例
  • 確保fetch_table1_results渴望,負荷table2table3

這樣做的方式後者不盡相同,但我很喜歡(而且這不會成爲流行的觀點)直接檢查數據庫查詢。所以,你可以鍵入類似以下內容:

fetch_table1_results(1).to_sql.should include('JOIN table2')

也就是說,或者類似的東西。我還應該注意到這些測試應該在模型中,而不是控制器。