在轨道上测试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_generatesassert_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中。