我是新來的Rails和RSpec和我使用Rspec的測試這個控制器的方法,包括異常處理:如何在Rails中使用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
如何假扮在本次測試引發錯誤,因此實際檢查重定向是否會發生?
謝謝!
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'中定義了這個異常類,現在我的測試通過了。謝謝! – 2013-02-18 19:58:45