ActionController :: TestCase的方法get忽略routes.rb?

时间:2011-09-05 14:26:13

标签: ruby-on-rails unit-testing controller

我遇到问题似乎表明ActionController :: TestCase.get()方法忽略了我在routes.rb中的内容。

Rails版本是3.0.10。

我对我的XmlRpcController #index动作进行了以下RSpec2测试:

it "should get nothing in response to GET request" do
  get :index
  response.response_code.should == 400 #bad_request
end

在routes.rb中唯一与此路由相关的行是:

post 'rpc', :to => "xml_rpc#index"

'rake routes'也只显示这条路线。

因此,当我运行此测试时,操作实际上已执行!我通过在其中放入一个简单的放置来判断这一点)并且日志包含:

  

由XmlRpcController #index处理为HTML

此外,如果我在浏览器中转到“localhost:3000 / rpc” - 它说没有找到路由:就像它应该的那样。但测试还有其他行为,这让我很困惑......

任何人都可以暗示我为什么会这样?我刚刚开始学习RoR :) 之前我觉得TestCase的这些'get / post'方法确实尊重routes.rb ...

我错过了一些明显的东西吗? :)

1 个答案:

答案 0 :(得分:0)

似乎'get:index'方法实际上忽略了routes.rb。

对我来说,真正的解决方案是使用为此特定目的编写的 be_routable rspec匹配器:

  describe "GET 'contact'" do
    it "should be successful" do
      { :get => '/rpc' }.should_not be_routable
    end
  end

感谢来自Ruby-Forum的一些用户。更多信息here