3 Stimmen

RSpec-Tests für benutzerdefinierte Benutzernamen-Routen schlagen fehl

Ich habe eine eingeschränkte Route, die Benutzernamen wie folgt abgleicht:

controller :users, :path => '/:username', :as => :user, :constrain => { :username => /^_?[a-z]_?(?:[a-z0-9]_?)*$/i } do
   # viele geschachtelte Routen hier
end

Wenn ich RSpec-Tests dafür schreiben will (anstatt user_id wie üblich zu verwenden), schlagen alle Tests fehl, weil es die Route "nicht finden kann", obwohl sie auf dem Server einwandfrei funktioniert.

Beschreibung für eine ungültige Anfrage" do
  it "sollte eine 404 rendern, wenn ein zugehöriges Foto nicht gefunden wurde" do
    # gib ihm eine ungültige Foto-ID
    xhr :post, :destroy, :id => "999999", :photo_id => "999999", :username => @photo_owner.username
    # nicht gefunden
    response.status.should == not_found
  end
end

Dieser Test hat einwandfrei funktioniert, als ich die user_id in meinen Routen benutzt habe, bevor ich zu Benutzernamen gewechselt bin:

resources :users do
  # geschachtelte Routen
end

und

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

Also was mache ich falsch und was hat sich geändert?

Meine Serverkonsole zeigt Folgendes an, was bedeutet, dass alle Parameter ordnungsgemäß übergeben wurden:

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

2voto

Substantial Punkte 6664

Verwenden Sie :constraints => {...} in Ihrer Routendefinition.

Sie haben zu viele Parameter, die übergeben werden...

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

Rails erkennt :constrain nicht, daher werden es und dessen Inhalt als Parameter weitergeleitet, anstatt vom Rails-Router verarbeitet zu werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X