私はRailsとRspecが初めてで、Rspecを使用して、例外処理を含むこのコントローラーメソッドをテストしています:
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
上記のパスを正しくテストする方法がわかりません。無効な検索の後 (エラーが発生した場合)、ホームページにリダイレクトする必要があります。私はこのようなことを試しました:
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
テストを実行すると、次のエラーで失敗します。 NameError: uninitialized constant Movie::NoDirectorError
このテストでエラーを発生させて、実際にリダイレクトが発生するかどうかを確認する方法は?
ありがとう!
アップデート:
nzifnab が説明したように、見つけることができませんでしMovie::NoDirectorError
た。この例外クラスを定義するのを忘れていました。だから私はそれを追加しましたapp/models/movie.rb
:
class Movie < ActiveRecord::Base
class Movie::NoDirectorError < StandardError ; end
#some model methods
end
これで問題が解決し、このテストは成功しました。