2014-02-21 27 views
1

我正在寫一些控制器/請求規範,並且正在處理更新請求。相當直接,並在其他一些情況下,這是完美的工作,但我似乎遇到了困難。RSpec params都是字符串,打破測試

在我的routes.rb文件,我有限的控制器的動作爲使

resources :model, except: [:destroy, :edit, :new] 

爲了避免具有show動作稱爲如果用戶請求/new的問題,我加了一個約束,所以路線現在看起來

resources :model, except: [:destroy, :edit, :new], constraints: { id: /\d/ } 

這工作得很好,並要求在404 /new的結果,但是我現在有我的要求的測試問題,因爲RSpec的似乎讓所有的參數字符串。

在我的測試,我做

resource = FactoryGirl.create(:model) 
params = { id: resource.id, resource: { edited: true }} 
put :update, params 

然而,這是導致錯誤

No route matches {:id=>"10", :resource=>{:edited=>true}, :controller=>"models", :action=>"update"} 

如果這個錯誤是正確的,那麼看來,儘管我設置id參數去是存儲在資源中的整數ID(即使我顯式地將.to_i放在它上面)param正在作爲字符串發送,並且由於我的約束而不匹配路由。

有沒有辦法阻止這種行爲?我的路由測試工作正常,所以我很困惑,爲什麼這是失敗。

UPDATE

有趣的是,如果我從控制器功能以請求規格移動的測試,這不再失敗並且工作正常。我很樂意讓它們都能夠滿足要求,但我仍然好奇爲什麼會發生這種情況,或者我是否偶然發現了rSpec中的一個bug?

回答

0

您的正則表達式指定一個數字id,但您傳遞了兩位數的ID。也許修復就像將正則表達式更改爲/\d+/一樣簡單。

+0

哈哈現在我覺得自己像個白癡!似乎要做的伎倆。 – PaReeOhNos