The rails code is pretty straightforward:  def uses_transaction(*methods)
        @uses_transaction = [] unless defined?(@uses_transaction)
        @uses_transaction.concat methods.map(&:to_s)
      end

      def uses_transaction?(method)
        @uses_transaction = [] unless defined?(@uses_transaction)
        @uses_transaction.include?(method.to_s)
      end
    end

    def run_in_transaction?
      use_transactional_fixtures &&
        !self.class.uses_transaction?(method_name)
    end

Works for me in my tests.

uses_transaction "it should do this"
it "should do this" do
  puts "runs in transaction=#{self.run_in_transaction?}"
end

runs as expected, providing false when the uses_transaction is set, and true
otherwise (assuming   config.use_transactional_fixtures = true).

Regards,
Nick

On Wed, May 6, 2009 at 12:43 PM, Francis Hwang <s...@fhwang.net> wrote:

> On Wed, May 6, 2009 at 9:47 AM, Nicholas Van Weerdenburg
> <vanwe...@gmail.com> wrote:
> > As far as I can tell, RSpec simply uses inherited TestCase capabilities
> for
> > transactions, including use_transactional_fixtures (it's config setting
> is
> > simply passed on) and likely uses_transaction.
> > I'm guessing you can do something like:
> >
> >     uses_transaction :create
> >     it "should save message" do
> >         ...
> >     end
> >
> > At least it gives no exception for me.
> > The TestCase logic is pretty simple- it skips transactional fixtures if
> the
> > method is in it's array, so I imagine it works.
> > If not, this shoulda ticket talks about the same need, with a patch that
> > integrates it into shoulda contexts. That might give some clues.
> > https://thoughtbot.lighthouseapp.com/projects/5807-shoulda/tickets/97
>
> Any thoughts on what uses_transaction wants as an argument? I can't
> help but feel like I've tried 10 combinations of ways to do this, and
> there's some 11th way that will be easy but I haven't thought to try.
>
> For context, my code doesn't even use transactions; it's using a 2nd
> DB connection to a slave DB, which will be different in some envs and
> not others. This seems to get tripped up by transactions since the
> master connection makes a change to the DB and the slave connection
> needs to see it right away. (Yes I know in production there are
> latency issues, that's acceptable in this case.)
>
> > BTW- I happened to be watching your RubyConf2008 Testing Heresies talk
> > yesterday. Good talk.
>
> Thanks!
>
> Francis
> _______________________________________________
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to