[rspec-users] Interdependency between RSpec files
mailing_lists at railsnewbie.com
Wed Nov 14 12:28:07 EST 2007
On Nov 14, 2007, at 11:37 AM, Glenn Ford wrote:
> I run my suite of tests, one test fails.
> I run that one test file, no tests fail.
> Something is carrying over between files and I can't figure out what.
> I tracked down the problem to the very line it's occurring on, with
> printouts before and after every call to make sure I know exactly what
> is being reached.
First of all - make sure you don't have any after(:create) or before
(:create) specs. If an AR object is created in one of these, it *IS
NOT* going to be rolled back.
You might also try the following:
rake db:migrate; rake db:test:prepare
Log into mysql (or whatever database) - inspect it to see that no
records are present in your test database (if you really aren't using
fixtures at all).
> In this spec I have 0 fixtures/mocks/stubs. The objects in this file
> do not live anywhere outside of the file. This is a model spec and
> I'm using all real objects to test it. In the "before" block I set up
> some models, and in my spec itself I, in each test, make a couple
> changes then call a model's save method. That model has an
> "after_create" method which calls a method in a child model that it
> has. It is THIS method which is not being called. I have printouts
> before and after everything, like I said, and the lines before and
> after the method call work, which leads me to believe that method IS
> getting called. However I have a "puts 'foo'" at the top of that
> method and it doesn't get printed.
You might want to try running that one spec with the following
snippet stuck into the top of your after_create method:
require 'rubygems'; require 'ruby-debug'; debugger;
When the spec runs, you will be dropped down into the ruby debugger,
so you can inspect what is *actually* going on. (You will need to
know how to use a debugger, and have the ruby-debug gem installed).
If that doesn't yield any helpful information, then remove that
snippet and put it at the top of the failing test (the first line of
the example ("it") block). Then run the full test suite, and again,
you will be dropped down into the debugger.
Hope that helps,
More information about the rspec-users