Тесты RSpec для пользовательских маршрутов имени пользователя не проходят - PullRequest
3 голосов
/ 05 февраля 2012

У меня есть ограниченный маршрут, который соответствует именам пользователей, например:

controller :users, :path => '/:username', :as => :user, :constrain => { :username => /^_?[a-z]_?(?:[a-z0-9]_?)*$/i } do
   # lots of nested routes go here
end

Когда я собираюсь написать для этого тесты RSpec (вместо использования user_id, как обычно), все тесты терпят неудачу, потому что этоне удается найти маршрут ", хотя он отлично работает на сервере.

describe "for an invalid request" do
  it "should render a 404 if an associated photo is not found" do
    # give it a bad photo id
    xhr :post, :destroy, :id => "999999", :photo_id => "999999", :username => @photo_owner.username
    # not found
    response.status.should == not_found
  end
end

Этот тест работал нормально, когда я использовал user_id в своих маршрутах до перехода на имена пользователей:

resources :users do
  # nested routes
end

и

xhr :post, :destroy, :id => "999999", :photo_id => "999999", :user_id => @photo_owner.id

Так что я делаю не так и что изменилось?

Моя консоль сервера показывает это, что означает, что все параметры должны быть переданы правильно:

Processing by TagsController#destroy as JS
  Parameters: {"constrain"=>{"username"=>/^_?[a-z]_?(?:[a-z0-9]_?)*$/i}, "username"=>"rubynewb", "photo_id"=>"2004-the-title-of-the-photo-here", "id"=>"1797"}

1 Ответ

2 голосов
/ 10 февраля 2012

Используйте :constraints => {...} в вашем определении маршрута.

Передается слишком много параметров ...

"constrain"=>{"username"=>/^_?[a-z]_?(?:[a-z0-9]_?)*$/i}

Rails не распознает :constrain, поэтому он и его содержимое передаются как параметр, а не обрабатываютсяпо маршрутизатору Rails.

...