2012-10-29 18 views
0

我最近由當前應用程序升級到Rails 3.2.8,無法通過一些測試。我做了一個幫助器方法,將某些散列與params散列合併,並創建一個指向當前頁面的鏈接。我使用的技術見於:link_to the current page plus/merged with a paramRails 3.2.8和rspec,link_to當前路徑,params散列沒有正確轉換

這裏是一個精簡版:

describe "simple_link" do 
    it { simple_link.should == "<a href=\"/assets\">Page</a>" } 
end 

其中又傳遞3.2.6:

def simple_link 
    link_to "Page", params.merge(:c => nil) 
end 

那我就用類似測試。

但是,現在我收到rspec錯誤No route matches {:c=>nil}。 Rails,rspec或水豚都認爲散列就是路線。如果我添加一個適當的路線,如:users_path,那麼url_for似乎拿起散列。在瀏覽器上測試,一切正常,沒有錯誤。我做錯了什麼,是在3.2.8中改變了嗎?還是這是一個錯誤?

+0

剝離代碼並不能幫助我們。 – sevenseacat

+0

我從提供的代碼中獲得與我真正的幫助器方法相同的錯誤。 –

+1

可能有關?:https://github.com/rails/journey/issues/42雖然這發生在我升級*到* rails 3.2.6時。這個解決方案(至少對我來說)是爲我的Gemfile添加一行代碼:'gem'journey','1.0.3',它可以回溯到1.0.3版。 –

回答

1

升級導軌還將journey佈線寶石從1.0.3升級到1.0.4。在升級,有一個變化how routing treats constraints

1.0.4固定滑軌從3.1迴歸情況,路由器將返回即使限制用戶通過在沒有匹配的路由。

既然你提到(在評論中)降級到1.0.3的旅程解決了問題,這次旅程的變化幾乎肯定是問題的原因。看看這些github上的問題找到可行的解決方案:

+0

附註:截至目前,降級到Rails 3.2.6需要使用旅程1.0.3 –

+0

是的,我被困在了3.2.6,現在我想到了這是我留在那裏的原因。但是,當我嘗試升級測試都通過了...我相信這個補丁是爲我修復它:http://stackoverflow.com/questions/12414400/basic-devise-spec-with-i18n#12414995 –

0

的錯誤是我打電話從一個輔助的link_to,而不是提供當前請求的方式。現在,我可以通過剔除url_for來解決錯誤,但這不允許我測試params散列。所以試圖找到更好的方法。

it "should return the right tag" do 
    self.stub!(:url_for).and_return '/bar' 
    simple_link.should == "<a href=\"/bar\">Page</a>" 
end