2011-05-19 163 views
0

我正在測試在find語句中使用include的控制器操作。測試運行時會引發RecordNotFound。我錯過了什麼嗎?我應該如何處理這些事情的測試?測試控制器 - 使用find查找時未找到記錄

控制器:

def show 
    @forum_sub_topic = ForumSubTopic.includes(:forum_posts => [:post_replies]).find(params[:id]) 
    respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @forum_sub_topic } 
    end 
end 

測試:

it 'renders show template' do 
    ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic } 
    get :show, :id => "37" 
    response.should render_template('show') 
ebd 

回答

2

你磕碰上ForumSubTopic:find,但你的控制器是ActiveRecord::Relation對象,而不是ForumSubTopic模型上調用.find

如果你不那麼在乎了with("37")部分(因爲我不知道是否有可能這樣做),RSpec的提供stub_chain方法應爲你工作:

ForumSubTopic.stub_chain(:includes, :find) { mock_forum_sub_topic } 

否則,你可以把多個存根:

ForumSubTopic.stub(:includes) { ForumSubTopic } 
ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic } 
+0

這就是我所需要的,謝謝:)鏈式方法更圓滑,我會用 – 2011-05-19 05:09:50