假設我有以下作用:如何用複雜的查詢測試控制器操作?
def index
@posts = Post.joins(:tags).where(:tags => {:id => params[:tag_id]})
end
它暴露@posts
的觀點,這將顯示每一個崗位與給定的標籤。
一切工作正常,但我堅持試圖找出測試它的最佳方法。
我真的不喜歡嘲諷,因爲它可能剎車測試,如果我改變該行:
@posts = Post.where(:tags => {:id => params[:tag_id]}).joins(:tags)
我真的不想打數據庫,因爲它會降低試驗速度,但我正在考慮將查詢提取到模型內部的一個方法,並在那裏測試它是否是唯一的方法。
編輯:是的,我知道我可以在這種情況下使用Tag.find(params[:tag_id])
,但這並不是問題是什麼。我只是不想在查詢中引入另一個模型,並且更難解釋偏離實際問題的焦點,即:我們是否應該在控制器中保留複雜的查詢?如果是這樣,測試它的最好方法是什麼?
一個附帶的問題,爲什麼不:@ posts = Tag.find(params [:tag_id])。posts。這感覺更自然,很少在那裏測試。 – tokland 2011-04-13 21:03:46
複雜的查詢應該是您的模型中的範圍,而不是控制器中的範圍。 – apneadiving 2011-04-13 21:04:04
@tokland這只是一個帶有「連接」和「where」的查詢的例子,而不是真正的代碼。我只是試圖簡化它,因此很容易解釋它的作用。 – 2011-04-13 21:15:17