2011-02-12 66 views
2

我正在使用RSpec + Shoulda在Rails 3中測試我的RESTful控制器。我在計算如何測試創建動作的重定向時遇到困難。標準的RESTful控制器應該重定向到新帖子的顯示操作。舉例來說,如果我有一個ProjectsController的項目模型,然後在成功創建,該行動應:使用Shoulda redirect_to來測試控制器的創建動作

redirect_to project_url(@project) 

早該提供了處理這一個方便redirects_to宏。這是我曾嘗試:(是的,我使用的FactoryGirl,但由於我只使用它在這種情況下的屬性,它不應該的問題,我認爲)

describe ProjectsController, '#create' do 
    context "Anonymous user" do 
    before :each do 
     @attrs = Factory.attributes_for(:project_with_image) 
     post :create, :project => @attrs 
    end 
    it { should assign_to(:project) } 
    it { should respond_with(:redirect) } 
    it { should redirect_to(@project) } 
    end 
end 

如何指定那裏的最後一次測試?它應該redirect_to(...)是什麼?我已經嘗試了@project,project_url(@project)..但我無法弄清楚。

看着Shoulda matcher代碼,我注意到redirect_to匹配器可以接受一個塊。但我不知道如何訪問該塊中新創建的@project對象...

有什麼想法?

回答

5

還沒有嘗試過,但問題可能是@project在您的規範中不可用。

it {should redirect_to(Project.last) }
it {should redirect_to(assigns(:project)) }
怎麼樣?

+1

謝謝!指派[:項目]做到了。我不知道如何從控制器訪問分配的變量。 – Rick 2011-02-14 04:11:55

相關問題