我正在寫一些控制器/請求規範,並且正在處理更新請求。相當直接,並在其他一些情況下,這是完美的工作,但我似乎遇到了困難。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?
哈哈現在我覺得自己像個白癡!似乎要做的伎倆。 – PaReeOhNos