J'ai un itinéraire contraint qui correspond à des noms d'utilisateur comme celui-ci :
controller :users, :path => '/:username', :as => :user, :constrain => { :username => /^_?[a-z]_?(?:[a-z0-9]_?)*$/i } do
# lots of nested routes go here
end
Quand je vais écrire des tests RSpec pour cela (par rapport à l'utilisation de user_id
comme d'habitude), tous les tests échouent parce qu'il "ne peut pas trouver la route", même si cela fonctionne bien sur le serveur.
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
Ce test fonctionnait très bien lorsque j'utilisais l'option user_id
dans mes itinéraires avant de passer aux noms d'utilisateur :
resources :users do
# nested routes
end
y
xhr :post, :destroy, :id => "999999", :photo_id => "999999", :user_id => @photo_owner.id
Alors qu'est-ce que je fais mal et qu'est-ce qui a changé ?
La console de mon serveur affiche ce résultat, ce qui signifie que tous les paramètres doivent être correctement transmis :
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"}