djb*_*ick 23 rspec ruby-on-rails
如何发布到与测试脚本当前指向的控制器不同的控制器?
示例:在user_controller_spec.rb中
it "should just post to users" do
post :create, @params # this goes to the users controller
end
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
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
Run Code Online (Sandbox Code Playgroud)
ps:我不想设置黄瓜
Dav*_*sky 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.
小智 6
如果在调用测试方法之前分配@controller的值,有一种方法.例
def setup
@controller = UserController.New
do user stuff
@controller = ThisController.New
do test intented for this controller
end
Run Code Online (Sandbox Code Playgroud)
基于其他答案,但更安全。
存储当前控制器实例并使用所需的控制器创建一个新实例。最后,用旧的存储实例替换新的控制器实例。
def setup
old_controller = @controller
@controller = UserController.new
# do user stuff
@controller = old_controller
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13926 次 |
| 最近记录: |