【问题标题】:RSpec Routing Error in test but not in app测试中的 RSpec 路由错误,但应用程序中没有
【发布时间】:2013-04-30 17:05:39
【问题描述】:

我正在开发的应用中有一条路线,看起来像这样...

  match ":place_id/:id", :controller => "companies", :action => "show", :place_id => /\S{2}/

所以在我的浏览器中我可以导航到这个 URL。

mylocalmachine/gb/some-company

在服务器日志中一切正常。

Started GET "/gb/some-company" for 127.0.0.1 at 2013-04-30 17:44:52 +0100
Processing by CompaniesController#show as HTML
  Parameters: {"place_id"=>"gb", "id"=>"some-company"}

但在控制器规范中,我正在尝试测试此路由及其行为。

get "/gb/some-company"

但我得到了这个错误

ActionController::RoutingError: No route matches {:controller=>"companies", :action=>"gb/some-comapny"}

注意:我尝试将此路由放在 routes.rb 文件的顶部,以查看测试是否有效,但没有运气。所有其他规格也都通过了。我可能会出错的任何想法将不胜感激。

更新:这就是测试的样子...

params_from(:get, "/gb/some-company").should == {:controller => "companies", :action => "show", :country_id => "gb", :id => "some-company"}

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec rspec2


    【解决方案1】:

    这是因为 RSpec 控制器测试直接将您的请求与所描述控制器的操作名称相匹配。

    你的测试可能是这样的

    describe CompaniesController do
      it "does something" do
        get "/gb/some-company"
      end
    end
    

    如果您将 get "/gb/some-company" 替换为

    get :show, {place_id: 'gb', id: 'some-company'}

    我相信它会按照你想要的方式工作。

    如果您想通过 RSpec 实际将请求设为“/gb/some-company”,您可能需要查看请求规范。

    他们会允许你做这样的事情

    describe "Company stuff" do
      it "is awesome"
        get "/gb/some-company"
      end
    end
    

    更新

    根据您更新的问题,我现在假设您使用的是旧版本的 RSpec。 RSpec 2 目前没有params_from 方法

    无论如何,根据你想要的,你想使用routing specs

    您想要的规范在 RSpec 2 中看起来像这样

    describe "Company matching" do
      it "matches the routes" do
        expect(:get => '/gb/some-company').to route_to(:controller => "companies", :action => "show", :country_id => "gb", :id => "some-company")
      end
    end
    

    我不能 100% 确定它在旧版本的 RSpec 中的外观,因为我似乎找不到他们的文档。

    【讨论】:

    • 是的,谢谢,测试实际上是为了确保从 URL 中正确提取参数。我已经更新了问题以显示实际测试,有没有更好的方法可以为此编写测试?
    • 这正是我所追求的,我正在将应用程序从 Rails 2-3 和 RSpec 升级到版本 2。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多