在轨道上测试ruby路线的位置
在轨道上测试ruby路线的位置?
- unit testing?
- function测试?
- 集成测试?
加成:
确切地说,在哪里应用指南和api上描述的断言?
路由应作为集成测试的一部分完成。 集成测试是测试应用程序的重要工作流程的地方 – 更具体地说,是否定义URL似乎是一个重要的工作流程。
您的集成测试看起来像任何正常的集成测试 :
# /tests/integration/routes_test.rb require 'test_helper' class RoutesTest < ActionController::IntegrationTest test "route test" do assert_generates "/photos/1", { :controller => "photos", :action => "show", :id => "1" } assert_generates "/about", :controller => "pages", :action => "about" end end
关于@jemminger没有测试路由的响应 – 虽然是Rail的测试validationroutes.rb是否有效,但是测试路由中是否定义了http://yoursite.com/users
并不是Rail的责任。 需要注意的是,大多数路由测试可以在现有的集成测试中完成,因此对路由的特定测试可能是多余的。
我能想到的特定用例是已经或将要从Rails 2升级到Rails 3的所有人。定义路由的代码已经发生了显着变化,最好从测试中找出路由已升级正确,而不是用户报告404错误时。
为什么你觉得需要测试路线? 纯粹是为了确保routes.rb中定义的路由确实有用吗? 如果是这样,那就不要了。 这不是应用程序测试的工作,以确保框架的内部运行正常 – 这是Rails框架自己的测试的工作。
如果您想要测试某种动态/用户可定义的路由,我可能会选择集成。
我建议你为test / controllers文件夹中的路由创建一个测试文件。
class HomeRoutesTest < ActionController::TestCase test "must route to home index" do assert_routing '/', controller: "home", action: "index" end end
有人提到它们属于集成测试。 我不同意。 你只是测试路线,就是这样。 因此,它宁愿属于function甚至unit testing,而不是集成测试。
您可以在Rails RailsGuide测试的第9节“测试路径”中找到参考
集成测试用于流程 ,您可以在其中测试不同控制器操作的交互,例如执行用户登录等业务流程,浏览站点并将项目放入购物篮。 这表示如果您的路由不起作用,您的集成测试将无法工作。 因此,许多人说集成测试是测试路由的地方。 但是,考虑到开发周期,在进行集成测试之前,首先要创建unit testing,控制器测试,路由测试等。
另请注意: assert_routing
执行两个测试: assert_generates
和assert_recognizes
。
根据这个rails bug的评论,正确的地方是function测试。 如果您尝试在集成测试中测试它们,则您在routes.rb
建立的路由将不可用。
require 'test_helper' class FooControllerTest < ActionController::TestCase test "foo routes" do assert_recognizes({:controller => 'foo_controller', :action => 'list'}, '/foos' end end
路由测试是列出野外存在的链接的好地方,并避免因代码更改而无意中破坏它们。 有点奇怪的是,测试的范围是控制器,因为它是你实际测试的整个路径集,但我还没有听说过“路由集测试”。
如果您使用的是rspec,那么最自然的路由测试位置在目录spec/routing
。 来自The Rspec文档 :
路由规范标记为
:type => :routing
或者如果已设置config.infer_spec_type_from_file_location!
将它们放在spec / routing中。