如何在运行方法时在Rspec中引发异常?

时间:2016-09-20 14:20:18

标签: ruby-on-rails ruby rspec rspec-rails

我有一个我想测试的ActiveRecord交易,但我很难理解如何编写我的Rspec测试。以下是我的目标示例:

it "does not change the model count" do
  expect(Model.count).to be(0)
  expect {
    MyClass.my_method(arg1, arg2)
  }.to raise_error
  expect(Model.count).to be(0)
end

my_method正在运行时,有几个对象被保存到数据库中。我想在此方法运行时引发异常,以便调用事务回滚。

提出此异常的最佳方法是什么?

修改

我感谢大家花时间给我输入。我的目标是测试事务回滚。我在一个事务中调用了两个不同的方法,我想确保如果在第二个方法中出现错误,那么第一个方法中写入数据库的数据就不会持久存在。

我按照自己的需要开始工作,尽管我认识到它的设计。

class MyClass

  def self.save_my_values(arg1, arg2)
    parsed = parse(arg1)

    ActiveRecord::Base.transaction do
      some_method(parsed, arg2)
      my_method(parsed, arg2)
    end
  end
end

以下是规范中的代码:

context "when there is an error" do
  before do
    allow(MyClass).to receive(:my_method).and_raise(StandardError)
  end

  it "does not change the model count" do
    expect(Model.count).to be(0)
    expect {
      MyClass.my_method(arg1, arg2)
    }.to raise_error(StandardError)
    expect(Model.count).to be(0)
  end
end

我会进一步完善它,但这是我寻找的起点。再次感谢你!

0 个答案:

没有答案