测试rails路由:找不到ActionController :: Assertions :: RoutingAssertions方法

Edw*_*son 2 integration-testing unit-testing routes ruby-on-rails

我正在尝试测试我的rails 2.3.4应用程序上的路由.有几个站点解释了如何测试路由,包括rails docs,但我按照说明收到错误.

首先,我假设这些测试可以在相关的单元测试文件中完成.似乎没有更明显的地方,也没有任何文件具体说明.

也就是说,这是一个浓缩版本 test/unit/TitlesTest.rb

require File.dirname(__FILE__) + '/../test_helper'

class TitleTest < Test::Unit::TestCase
  # include ActionController::Assertions::RoutingAssertions

  def test_routes
    assert_routing "games", { :controller => "titles", :section => "games", :action => "index", :id => nil }
  end
end
Run Code Online (Sandbox Code Playgroud)

rake test:units 失败并出现错误:

NoMethodError: undefined method `assert_routing' for #<TitleTest:0x7f387232ec98>
    /test/unit/title_test.rb:7:in `test_routes'
Run Code Online (Sandbox Code Playgroud)

我在Rails API中看到了assert_routing的定义ActionController::Assertions::RoutingAssertions,所以我尝试包含该模块,只是让它在其他地方失败.

请注意include上面代码示例中的注释行.

NoMethodError: undefined method `clean_backtrace' for #<TitleTest:0x7fd895fadf00>
    /test/unit/title_test.rb:7:in `test_routes'
Run Code Online (Sandbox Code Playgroud)

clean_backtrace 是ActionController :: TestCase :: Assertions中定义的另一种测试方法.

我没有得到任何谷歌搜索结果这些错误 - 没有其他人似乎有这个问题.如果我在新生成的rails应用程序中重新创建场景,也会出现问题.我不认为我应该在我的测试用例中包含这些模块.这可能有什么问题?

Edw*_*son 5

路由测试应作为集成测试的一部分完成.

这些可以使用生成 script/generate script/generate integration_test routes

一个例子:

class RoutesTest < ActionController::IntegrationTest
  fixtures :all

  def test_resources_route
    assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
  end
end
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 5

在Giant Robots上有一个升级Rails陷阱列表.显然你的路由测试应该使用class ActionController::TestCase,而不是ActiveSupport::TestCase.