1
嗨我的控制器中有以下查詢,我想編寫Rspec規範。我對Rspec是新手,我不知道如何編寫規範。請幫助如何爲以下查詢編寫Rspec規範
table1.includes(:table2).where(table1: {id: params[:id]}).includes(:table3)
我也嘗試調查模擬和存根(stub),但我不明白如何使用它們來查詢這樣的查詢。
謝謝
嗨我的控制器中有以下查詢,我想編寫Rspec規範。我對Rspec是新手,我不知道如何編寫規範。請幫助如何爲以下查詢編寫Rspec規範
table1.includes(:table2).where(table1: {id: params[:id]}).includes(:table3)
我也嘗試調查模擬和存根(stub),但我不明白如何使用它們來查詢這樣的查詢。
謝謝
當面對這些問題時,我傾向於將查詢封裝在方法中。這樣,您就可以簡單地將數據存入方法中,而不用擔心數據衛生問題。
例如:
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
渴望,負荷table2
和table3
這樣做的方式後者不盡相同,但我很喜歡(而且這不會成爲流行的觀點)直接檢查數據庫查詢。所以,你可以鍵入類似以下內容:
fetch_table1_results(1).to_sql.should include('JOIN table2')
也就是說,或者類似的東西。我還應該注意到這些測試應該在模型中,而不是控制器。
你想要測試什麼? –
您是否想要測試它在特定時間內運行,它是否「正確」並返回預期結果或其他內容?在我們提供幫助之前,你需要知道你想測試什麼。 – jefflunt
@ChrisHeald,Normalocity - 我想確保查詢返回所需的結果。 – rajkumarts