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