我有一个我想测试的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
我会进一步完善它,但这是我寻找的起点。再次感谢你!