使用Shoulda redirect_to测试控制器的创建操作

时间:2011-02-12 19:03:31

标签: ruby-on-rails ruby-on-rails-3 rspec2 shoulda

我正在使用RSpec + Shoulda在Rails 3中测试我的RESTful控制器。我无法弄清楚如何测试创建操作的重定向。标准RESTful控制器应重定向到新帖子的show动作。例如,如果我有ProjectController的ProjectsController,那么在成功创建后,该操作应该:

redirect_to project_url(@project)

Shoulda提供了一个方便的redirects_to宏来处理这个问题。这是我尝试过的:

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

(是的,我正在使用FactoryGirl,但因为在这种情况下我只使用它来处理属性,所以它应该没关系。我想。)

如何在那里指定最后一次测试?它应该redirect_to(...)什么?我试过@project,project_url(@project)..但我无法弄明白。

查看Shoulda匹配器代码,我注意到redirect_to匹配器可以接受一个块。但我不确定如何访问该块中新创建的@project对象...

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

没试过,但问题可能是,你的规范中没有@project。怎么样

it {should redirect_to(Project.last) }
it {should redirect_to(assigns(:project)) }