0

我有一个 Rails 3 应用程序,并且正在尝试为所有路由编写测试。

想象一下这条非常简单的路线:

resources :jobs, :constraints => {:id => /\d+/}

我现在想测试一下。在我的功能测试中,很容易使用Rails 中的内置断言为肯定情况编写断言:

assert_routing "jobs/4", { :controller => "jobs", :action => "show", :id => "4" }

断言否定的最佳方法是什么?即“jobs/wibble”,没有通过约束,没有被路由,而是返回一个错误?有没有一些简单的方法来实现“assert_not_routing”或类似的东西?以前有人处理过这个吗?

4

2 回答 2

1

我最后找到的解决方案是在功能测试中测试有效URL的路由,在集成测试中测试无效URL的非路由。

我创建了一个名为 RoutesTest 的新集成测试类,并在其中存储了不应路由到任何地方的所有 URL。

require 'test_helper'

class RoutesTest < ActionDispatch::IntegrationTest
  test "broken routes don't work" do
    assert_raise(ActionController::RoutingError) {
      get "/jobs/wibble"
    } 
  end
end

我仍然在功能测试中测试有效路线。这里有一些测试神学失败了,很可能:在我们提出的关于特定测试应该在单元、集成和功能概念中的什么位置的任意且相当荒谬的理论中,这似乎有点奇怪。但我宁愿完成工作,也不愿与人争论测试神学。所以我就是这样做的。

于 2012-07-04T09:39:12.747 回答
0

您是否尝试过为路径声明零路由?

于 2012-07-03T22:11:57.257 回答