2011-11-16 98 views
54

我們的代碼:如何使用rspec在rails 3中傳遞到控制器中的參數?

describe "GET show" do 
    it "assigns the requested subcategory as @subcategory" do 
    subcategory = Subcategory.create! valid_attributes 
    get :show, :id => subcategory.id.to_s 
    assigns(:subcategory).should eq(subcategory) 
    end 

    it "has a sort parameter in the url" do 
    subcategory = Subcategory.create! valid_attributes 
    get :show, {:id => subcategory.id.to_s, :params => {:sort => 'title'}} 
    helper.params[:sort].should_not be_nil 
    end 
end 

,我得到了以下錯誤消息:

1) SubcategoriesController GET show has a sort parameter in the url 
    Failure/Error: helper.params[:sort].should_not be_nil 
    NameError: 
     undefined local variable or method `helper' for #<RSpec::Core::ExampleGroup::Nested_4::Nested_2:0x007f81a467c848> 
    # ./spec/controllers/subcategories_controller_spec.rb:54:in `block (3 levels) in <top (required)>' 

我怎樣才能在rspec的測試PARAMS?

回答

104
get :show, {:id => subcategory.id.to_s, :params => {:sort => 'title'}} 

應該

get :show, :id => subcategory.id.to_s, :sort => 'title' 

除非你的意思是通過params[:params][:sort]

而且

helper.params[:sort].should_not be_nil 

應該

controller.params[:sort].should_not be_nil 
controller.params[:sort].should eql 'title' 

(如果你的意思是測試一個幫手,你應該寫一個幫手規格)

+0

謝謝,非常有幫助。但它需要在params [:sort]之前添加控制器來實現這個訣竅。原諒我主動增加兩條線,使規格通過。 「controller.params [:sort] .should_not be_nil; controller.params [:sort] .should eql'title'」 – lkahtz

+0

@lkahtz沒問題,很好。 – jdeseno

相關問題