ruby-on-rails - 如何在 RSpec 测试中引发异常

标签 ruby-on-rails ruby rspec rspec3

我卡在了一个测试场景中。

我有一个 Controller 方法:

def update
  @object = Object.find params[:id]
  # some other stuff
  @object.save
  rescue ActiveRecord::StaleObjectError
    # woo other stuff
end  

我测试的第一部分:

context '#update'
  let(:object) { double }

  it 'nothing fails' do
    # some other stuff
    expect(Object).to receive(:find).with('5').and_return(object)
    expect(object).to receive(:save).and_return(true)
    xhr :put, :update, id:5
    expect(response).to be_success
    expect(assigns(:object)).to eq(object)
  end
end

现在我想测试 ActiveRecord::StaleObjectError 异常。我想 stub ,但我没有找到任何解决方案。

所以我的问题是,如何在 RSpec 测试中引发 ActiveRecord::StaleObjectError

最佳答案

比如这样

expect(object).to receive(:save).and_raise(ActiveRecord::StaleObjectError)

关于ruby-on-rails - 如何在 RSpec 测试中引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354356/

相关文章:

ruby-on-rails - 分发 Ruby on Rails 应用程序

ruby-on-rails - Rails 不会渲染 RestClient 异常主体,除非我插入它

ruby-on-rails - Guard with RSpec on Rails 4 发出大量警告

ruby-on-rails - RSpec - 获取描述类

ruby-on-rails - Rspec - 处理正确生成的电子邮件

ruby-on-rails - 使用 session 变量设置数据库连接

ruby-on-rails - postgres/postgreSQL fatal error : database "ew_dev" does not exist

ruby - 如何使用 Sequel 运行 Postgres psql "slash"命令

ruby-on-rails - 卡住 Rails 版本/gems 有什么意义?

javascript - 如何使用 Rails Assets 管道执行每页 javascript