ruby-on-rails – 如何在Rails中使用Rspec存根错误提升?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在Rails中使用Rspec存根错误提升?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是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:未初始化的常量Movie :: NoDirectorError

如何伪造这个测试中的错误,以便它实际检查重定向是否发生?

谢谢!

更新:

正如nzifnab所说,它找不到Movie :: NoDirectorError.我忘了定义这个异常类.所以我把它添加到app / models / movie.rb中:

class Movie < ActiveRecord::Base
  class Movie::NoDirectorError < StandardError ; end
  #some model methods
end

解决了我的问题,这个测试通过了.

解决方法

错误表示它不知道Movie :: NoDirectorError异常类在哪里被定义.您可能需要具体要求定义该类的文件或测试可能无法找到它.

Rails会使用传统的文件目录格式自动尝试找到任何常量缺失的常量.它将在电影/ no_director_error的load_path中查找一个文件,并根据常量的名称查找电影.如果找不到该文件或该文件没有定义预期的常量,您需要自己专门地要求该文件.

猜你在找的Ruby相关文章