2012-11-02 95 views
1

在我的控制器當用戶創建一個新的職位,他/她將被重定向到包含新創建的職位的頁面。我想在rspec中創建一個測試來覆蓋此重定向,但是遇到問題。具體來說,我想知道在refirst_to參數中寫什麼。這裏是下面的控制代碼..Rspec的重定向到測試

def create 
@micropost = Micropost.new(params[:micropost]) 
respond_to do |format| 
    if @micropost.save 
    format.html {redirect_to @micropost} 
    else 
    format.html {render action: 'edit'} 
    end 
end 
end 

這裏是RSpec的測試...

before do 
    @params = FactoryGirl.build(:micropost) 
end 

it "redirects to index" do 
    #clearly @params.id doesn't work. its telling me instead of a redirect im getting a 
    #200 
    #response.should redirect_to(@params.id) 
end 

回答

1

假設@params將創建一個有效的微柱(否則.save會失敗,你就可以渲染:編輯)...

it "redirects to index on successful save" do 
    post :create, :micropost => @params.attributes 
    response.should be_redirect 
    response.should redirect_to(assigns[:micropost]) 
end 

it "renders :edit on failed save" do 
    post :create, :micropost => {} 
    response.should render ... # i don't recall the exact syntax... 
end 
+0

嗯..添加'micropost:@ params.attributes'告訴我我不能質量分配屬性。沒有它,它告訴我我沒有收到重定向。還需要進一步調查。 – jason328

+0

這錯誤是由你的控制器呼籲Micropost.new引起的(PARAMS [:微柱])。見http://guides.rubyonrails.org/security.html#mass-assignment –

+0

我得到它的工作,但我首先有一個快速的問題。究竟是什麼寫作'原因:=微柱> @ params.attributes' VS只是'@ params'? – jason328