Folks,

I was wondering if someone would be able to help me out with a quandry.

I'm trying to write an rspec plugin module for merb that will run all
specs within an ActiveRecord (initially) database transaction - to
give functionality similar to rails transactional fixtures.

Here is the module:

module Merb
  module Test
    module TransactionalSpecs
      def begin_transaction
        ActiveRecord::Base.send :increment_open_transactions
        ActiveRecord::Base.connection.begin_db_transaction
      end

      def rollback_transaction
        if Thread.current['open_transactions'] != 0
          ActiveRecord::Base.connection.rollback_db_transaction
          Thread.current['open_transactions'] = 0
        end
      end

      def self.included(base)
        base.before(:each) { begin_transaction }
        base.after(:each) { rollback_transaction }
      end
    end
  end
end

and I'm including it in a spec_helper like so:

Spec::Runner.configure do |config|
  config.include(Merb::Test::TransactionalSpecs)
end

Unfortunately this results in every spec throwing a
SQLite3::SQLException "SQL logic error or missing database".

if I remove the self.included method from the module, and just add:

before(:each) { begin_transaction }
after(:each) { rollback_transaction }

within the describe block it works perfectly.

Does anybody know what might be causing this, or a way around it?

Thanks for your help.

Steve
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to