"companies", :action => "sh-6ren">
gpt4 book ai didi

ruby-on-rails - 测试中的 RSpec 路由错误但应用程序中没有

转载 作者:行者123 更新时间:2023-12-02 00:09:23 24 4
gpt4 key购买 nike

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

  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"}

但在 Controller 规范中,我正在尝试测试这条路线及其行为。

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"}

最佳答案

那是因为 RSpec Controller 测试将您的请求直接匹配到所描述 Controller 的操作名称。

你的测试可能看起来像这样

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 中会是什么样子,因为我似乎找不到他们的文档。

关于ruby-on-rails - 测试中的 RSpec 路由错误但应用程序中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com