Я пытаюсь выполнить две вещи внутри транзакции, и я не уверен, как это проверить в rspec. Мой код выглядит примерно так:Методы тестирования Rspec в транзакции
реализации:
def method
begin
ActiveRecord::Base.transaction do
...some implementation...
model1.save!
model2.save!
end
rescue => e
exception_info = {:class => e.class, :message => e.message, :backtrace => e.backtrace}
@logger.warn("Error. Rolling back.", :exception => exception_info)
end
end
Тесты:
it "model1 object is not created if model2 fails to save" do
Model1.any_instance.should_receive(:save).and_raise("model1 save error!!")
method
Model2.all.should == []
end
it "" do
Model2.any_instance.should_receive(:save).and_raise("model2 save error!!")
method
Model1.all.should == []
end
Я хочу, чтобы обе модели не должны быть сохранены или нет. Мои тесты rspec проверяют оба случая, но я продолжаю получать ошибки. Если я добавлю (: require_new => true) к транзакции, он будет работать. Я думал, что это предназначено для вложенных транзакций, а не что-то вроде этого. Я что-то упускаю?
Какие ошибки вы получаете? – NateSHolland
model2 создается, когда модель1 взрывается (вызывает ошибку) –
Ваши тесты всегда будут терпеть неудачу, так как 'Model.all' вернет' [] ', если нет записей. – fylooi