[LRUG] Handling opening and closing of transactions manually in ActiveRecord

Murray Steele murray.steele at gmail.com
Fri Oct 8 04:03:14 PDT 2010


I thought that RSpec (via rspec-rails) respected the
use_transactional_fixtures (e.g. wrap all the specs in a transaction) stuff
in ActiveSupport::TestCase?  Am I wrong?

On 8 October 2010 11:40, Matthew Willson <matthew at playlouder.com> wrote:

> Can't speak for datamapper, or for RSpec infact, but here's a little test
> mixin we use with Sequel and test/spec in case a similar approach works.
>
> module TransactionalTestCase
>  def run(*args, &block)
>    database.transaction do
>      super
>      raise Sequel::Error::Rollback
>    end
>  end
> end
>
> On 8 Oct 2010, at 11:32, Tim Cowlishaw wrote:
>
> > Hey all,
> >
> > I stumbled across Xavier Shay's article on setting up RSpec to use
> > transactional before(:all) blocks with datamapper the other day
> > (
> http://rhnh.net/2010/10/06/transactional-before-all-with-rspec-and-datamapper
> ),
> > which is convenient as it's something I've been meaning to do for ages
> > on one of our codebases that has a rather large test suite with lots
> > of setup in before(:each) blocks. Therefore, I thought I'd spend a bit
> > of time trying to get his solution working with ActiveRecord, rather
> > than Datamapper. However, because ActiveRecord's transaction interface
> > requires you to pass a block to the transaction method, containing the
> > work to be done within the transaction, rather than offering
> > transaction.begin and transaction.rollback methods a la datamapper,
> > this is a little trickier than expected. There is
> > ActiveRecord::Base.connection.begin_db_transaction, and
> > ActiveRecord::Base.rollback_db_transaction, but these don't handle
> > emulating nesting transactions with savepoints as
> > ActiveRecord::Base.transaction does, meaning I'd have to reimplement
> > that seperately - not an insurmountable task, but a sufficiently
> > complex bit of work to make me nervous. Therefore, has anyone run into
> > a similar need (to make before(:all) blocks transactional in rspec)
> > before? if so, how did you manage it?
> >
> > Cheers,
> >
> > Tim
> > _______________________________________________
> > Chat mailing list
> > Chat at lists.lrug.org
> > http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>
> --
> Matthew Willson
> Development Lead, MSP / Playlouder
>
> _______________________________________________
> Chat mailing list
> Chat at lists.lrug.org
> http://lists.lrug.org/listinfo.cgi/chat-lrug.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lrug.org/pipermail/chat-lrug.org/attachments/20101008/ebb76fbe/attachment.html>


More information about the Chat mailing list