【问题标题】:Using Shoulda redirect_to to test a controller's create action使用 Shoulda redirect_to 测试控制器的创建操作
【发布时间】:2011-02-12 19:03:31
【问题描述】:

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

redirect_to project_url(@project)

应该提供一个方便的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 对象...

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    没有尝试过,但问题可能是,@project 在您的规范中不可用。怎么样

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

    【讨论】:

    • 谢谢! assigns[:project] 做到了。我不知道如何从控制器访问分配的变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-01-08
    • 2011-02-28
    相关资源
    最近更新 更多