2011-08-28 13 views
7

abbastanza semplice problema (avrei pensato), ma sto avendo alcuni problemi:Rails RSpec Routing: Test azioni: ad eccezione Non far passare

In Rails 3.1.0.rc6/RSpec 2.6.0 , sto cercando di testare il percorso della mia risorsa 'prodotti', instradato in questo modo:

resources :products, :except => [:edit, :update] 

il routing per le azioni valide funziona, ma voglio assicurare che le vie di modificare e aggiornare non sono callable. Ecco quello che sto cercando:

it "does not route to #edit" do 
    lambda { get("/products/1/edit") }.should raise_error 
end 

Failure/Error: lambda { get("/products/1/edit") }.should raise_error expected Exception but nothing was raised # ./spec/routing/products_routing_spec.rb:11:in `block (3 levels) in '

... Eppure, quando corro

it "does not route to #edit" do 
    get("/products/1/edit").should_not route_to("products#edit", :id => "1") 
end 

ottengo

Failure/Error: get("/products/1/edit").should_not route_to("products#edit", :id => "1") ActionController::RoutingError: No route matches "/products/1/edit"

Qualsiasi idea di cosa sta succedendo qui? Immagino che questo dovrebbe essere abbastanza semplice, ma non riesco a capirlo.

risposta

9

Non so perché il lambda fallirebbe, ma non penso che il rspec-rails dsl sia destinato ad essere usato in questo modo. Hai provato qualcosa del genere?

{ :get => "/products/1/edit" }.should_not be_routable 

http://relishapp.com/rspec/rspec-rails/docs/routing-specs/be-routable-matcher

quindi non si può specificare cosa non lo fa rotta verso, ma è possibile specificare che non venga instradato.

+0

Abbiamo un vincitore. Strano - Penso che Rails 2 fosse usato per gestire "raise error" lambda, ma chiaramente non 3.1. Non ero nemmeno a conoscenza del metodo be_routable - molte grazie. – PlankTon

+1

Molto utile! Solo una breve nota: il test sopra DEVE essere in /spec/routing/xxxx.rb o fallirà con un errore. Ad esempio, non puoi avere questo in /spec/requests/xxxx.rb –

0

Hai un percorso alternativo? Perché ciò spiegherebbe il motivo per cui non viene emesso alcun errore, ma in effetti si tenta di valutare route_to("products#edit", :id => 1) perché la rotta non esiste.

+0

Bel pensiero, ma no. Questo è un progetto spoglio, letteralmente iniziato questo pomeriggio. Nessun reindirizzamento impostato - al momento è solo risorse impalcature scoperte, rspec e cetrioli. – PlankTon

Problemi correlati