如何发布到与测试脚本当前指向的控制器不同的控制器?
实施例: 在user_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:我不想设置黄瓜
答案 0 :(得分:28)
控制器规范是Rails功能测试的包装器,它不支持多个请求或控制器。你想要的是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。
答案 1 :(得分:5)
如果在调用测试方法之前分配@controller的值,有一种方法。实施例
def setup
@controller = UserController.New
do user stuff
@controller = ThisController.New
do test intented for this controller
end
答案 2 :(得分:2)
基于其他答案,但更安全。
存储当前控制器实例,并使用所需控制器创建一个新实例。最后,用旧的存储实例替换新的控制器实例。
def setup
old_controller = @controller
@controller = UserController.new
# do user stuff
@controller = old_controller
end