在rspec测试中发布到不同的控制器

如何发布到与测试脚本当前指向的控制器不同的控制器?

示例:在u​​ser_controller_spec.rb中

it "should just post to users" do post :create, @params # this goes to the users controller end 

我想做的事情如下:

  it "should post to user and people to do some integration testing" do post :create, @params # this goes to the users controller still post 'people', :create, @params # this goes to the people controller end 

ps:我不想设置黄瓜

控制器规范是Railsfunction测试的包装器,它不支持多个请求或控制器。 您想要的是RSpec请求规范(rails 3)或集成规范(rails 2)。 这些包装Rails集成测试,它支持多个控制器的多个请求(甚至多个会话),但它们与控制器规范的工作方式略有不同。 您必须使用完整路径(因此获取new_thing_path),并且您不能在控制器上存根任何东西(因为在您发出请求之前没有控制器)。

有关详细信息,请参阅http://relishapp.com/rspec/rspec-rails/docs/request-specs/request-spec和http://api.rubyonrails.org/classes/ActionDispatch/IntegrationTest.html 。

如果在调用测试方法之前分配@controller的值,有一种方法。 例

 def setup @controller = UserController.New do user stuff @controller = ThisController.New do test intented for this controller end 

根据其他答案,但更安全。

存储当前控制器实例并使用所需的控制器创建新的。 最后,用旧的存储实例替换新的控制器实例。

 def setup old_controller = @controller @controller = UserController.new # do user stuff @controller = old_controller end