2013-11-01 49 views
1

我想給測試控制器的這部分使用RSpec:Rspec:如何用局部和參數測試局部渲染?

controller.should_receive(:render).with({ 
:partial => 'popup_company/pages', 
:locals => {tab_filter: params[:tab_filter]} 
}) 

不過,我得到這個錯誤:

def popup_company 
    if params[:partial].present? 
    render partial: "popup_company/pages", locals: { tab_filter: params[:tab_filter] } 
    end 
end 

下面是上面提到的我的控制器規格測試部分

undefined local variable or method `params' 

夥計們,請你告訴我應該改變什麼來克服這個錯誤。我感謝您的幫助!

回答

0

所以params [:tab_filter]是在你的請求,所以它可能在你的得到。也就是說,你有這樣的東西:

get :popup_company, tab_filter: 'XXXXX', partial: 'YYYYY' 

在您的規定。您應該爲tab_filter參數創建一個變量隨機值,並使用它來驗證正在傳遞給渲染的適當值。像

tab_filter = SecureRandom.hex(10) 
get :popup_company, tab_filter: tab_filter, partial: 'YYYYY' 
controller.should_receive(:render).with({ 
    partial: 'popup_company/pages', 
    locals: { tab_filter: tab_filter } }) 

東西或者你可以使用一個render_template('popup_company/pages')規範,以確認該模板被渲染和測試基於渲染視圖的內容選項卡過濾器。

0

您的params是規範端的代碼;它只是試圖成爲一個局部變量。放入你期望的任何東西params[:tab_filter]

而且,一般來說,您不應該編寫測試 - 哎呀我的意思是「示例」 - 只是重複代碼所說的內容。你不關心你的控制器調用部分;你關心的是控制器用包含諸如此類的值的HTML進行響應。