发布于 2011-04-13 08:41:05
路由应该作为集成测试的一部分来完成。集成测试是测试应用程序的重要工作流程的地方-更具体地说,是否定义了URL似乎是一个重要的工作流程。
您的集成测试将看起来像任何normal integration test
# /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对不测试路由的回应--虽然验证routes.rb工作的是Rail的测试,但测试你的路由中是否定义了http://yoursite.com/users
并不是Rail的责任。需要注意的是,大多数路由测试可以在现有的集成测试中完成,所以针对路由的特定测试可能是多余的。
我能想到的具体用例是所有已经或将要从Rails2升级到Rails3的人。定义路由的代码已经发生了重大变化,最好是从测试中发现路由升级正确,而不是用户报告404错误时。
发布于 2011-03-14 00:32:02
为什么您觉得有必要测试这些路由?纯粹为了确保routes.rb中定义的路由能够正常工作?如果是这样,那就不要这样做。确保框架内部正常运行不是应用程序测试的工作,而是Rails框架自己测试的工作。
如果您想要测试某种动态/用户可定义的路由,我可能会选择集成。
发布于 2015-02-16 11:31:18
我建议您为测试/控制器文件夹中的路由创建一个测试文件。
class HomeRoutesTest < ActionController::TestCase
test "must route to home index" do
assert_routing '/', controller: "home", action: "index"
end
end
有人提到,它们属于集成测试。我不同意。您只是测试路由,仅此而已。因此,它宁愿进行功能测试,甚至单元测试,而不是集成测试。
您可以在Rails RailsGuide Testing, section 9. Testing Routes中找到参考资料
集成测试是针对流程的,您可以在其中测试不同控制器操作的交互,例如执行业务流程,如用户登录、浏览站点和将项目放入篮子中。也就是说,如果您的路由不起作用,那么集成测试就不会起作用。因此,许多人说集成测试是测试路由的地方。但是,考虑到开发周期,在进行集成测试之前,您需要先创建单元测试、控制器测试、路由测试等。
另外,assert_routing
做了两个测试:assert_generates
和assert_recognizes
。
https://stackoverflow.com/questions/5290245
复制相似问题