Steve Tooke
2008-Mar-14 15:33 UTC
[rspec-users] Adding before / after blocks to every spec
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