我是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这解决了我的问题,这次考试通过了。
发布于 2014-07-10 12:33:53
在Rails 4.1中:
verse_selector = double("VerseSelector", select_verses: ActiveRecord::RecordNotFound.new("Verses not found"))
verse_selector.select_verses现在将返回一个ActiveRecord::RecordNotFound
https://stackoverflow.com/questions/14942828
复制相似问题