首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Rails中使用Rspec提高存根错误?

如何在Rails中使用Rspec提高存根错误?
EN

Stack Overflow用户
提问于 2013-02-18 18:19:53
回答 3查看 24.6K关注 0票数 18

我是Rails和Rspec的新手,我使用Rspec来测试这个控制器方法,其中包括异常处理:

代码语言:javascript
复制
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

我不知道如何正确地测试该路径:在无效搜索(收到错误时)之后,它应该重定向到主页。我试过这样的方法:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
class Movie < ActiveRecord::Base
  class Movie::NoDirectorError < StandardError ; end
  #some model methods
end

这解决了我的问题,这次考试通过了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-18 18:37:37

错误指示它不知道在哪里定义了Movie::NoDirectorError异常类。您可能需要专门对定义该类的文件进行require,否则测试可能无法找到它。

Rails将自动尝试使用常规文件目录格式来定位任何constant missing常量。它将根据常量的名称在load_path at movie/no_director_errormovie中查找一个文件。如果找不到该文件,或者该文件未定义预期常量,则需要自己具体要求该文件。

票数 12
EN

Stack Overflow用户

发布于 2013-02-18 18:35:28

你们很亲密。您需要在其中添加any_instance

代码语言:javascript
复制
Movie.any_instance.stub(:find_movies_director).and_raise(Movie::NoDirectorError)

编辑:我看错了这篇文章。考虑到电影的一个例子,上面的内容将是可行的,但对于OP的问题则不起作用。

票数 21
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14942828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档