2013-04-30 60 views
3

我有一個應用程序,我工作的一個途徑,它看起來像這樣...RSpec的路由錯誤的測試,但不是在應用

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

所以在我的瀏覽器,我可以導航到該網址。

mylocalmachine/GB /一些-公司

在服務器記錄其所有的好。

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中文件的頂部,看看測試工作,但沒有運氣。其他所有規格也都通過了。任何想法,我可能會出錯,將不勝感激。

UPDATE:這是測試的樣子......

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

回答

3

這是因爲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 

UPDATE

現在我假設的基礎上,更新後的問題,您使用的是舊版本的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中看起來如何,因爲我似乎無法找到他們的文檔。

+0

是的,這工作表示感謝,測試實際上是確保params正確地從URL中提取。我已經更新了問題以顯示實際測試,有沒有更好的方法可以爲此編寫測試? – cih 2013-04-30 17:34:27

+0

看看我的更新回答 – 2013-04-30 17:51:43

+0

這正是我所追求的,我正在從Rails 2-3和RSpec升級到版本2的過程中。感謝您的幫助! – cih 2013-04-30 18:05:36