Sono nuovo di Rails e Rspec e sto usando Rspec per testare questo metodo di controllo che comprende la gestione delle eccezioni:Come annullare l'errore durante l'uso di Rspec in Rails?
def search_movies_director
@current_movie = Movie.find(params[:id])
begin
@movies = Movie.find_movies_director(params[:id])
rescue Movie::NoDirectorError
flash[:warning] = "#{@current_movie} has no director info"
redirect_to movies_path
end
end
io non riesco a capire come testare correttamente il detto percorso: dopo la ricerca non valida (quando viene ricevuto un errore) dovrebbe reindirizzare alla homepage. Ho provato qualcosa di simile:
describe MoviesController do
describe 'Finding Movies With Same Director' do
#some other code
context 'after invalid search' do
it 'should redirect to the homepage' do
Movie.stub(:find)
Movie.stub(:find_movies_director).and_raise(Movie::NoDirectorError)
get :search_movies_director, {:id => '1'}
response.should redirect_to movies_path
end
end
end
end
Dopo aver eseguito il test fallisce con un errore: NameError: uninitialized constant Movie::NoDirectorError
Come fingere sollevare un errore in questa prova in modo che verifichi effettivamente se reindirizzamento succede?
Grazie!
UPDATE:
Come ha spiegato nzifnab, non poteva individuare Movie::NoDirectorError
. Ho dimenticato di definire questa classe di eccezioni. Così ho aggiunto a app/models/movie.rb
:
class Movie < ActiveRecord::Base
class Movie::NoDirectorError < StandardError ; end
#some model methods
end
Questo risolto il mio problema e questo test ha esito positivo.
Hai ragione, 'Film :: NoDirectorError' non è stato definito da nessuna parte. Ho definito questa classe di eccezioni in 'app/models/movie.rb' e il mio test passa ora. Grazie! –