Daniel Upton
Daniel Upton

Reputation: 5741

Test suite problems in rails 3.1rc5

I recently upgraded an app i was working on to rails 3.1rc5..

For the most part it's been great but a few of my tests are having really weird issues..

For example in one of my cucumber specs i create a bunch of fake records using factory girl.. usually this works fine but it seemed that it wasn't creating the records for some reason..

So I commented out all of my factory stuff and replaced it with this:

c = Contact.new(:first_name => "SOMEONE", :last_name => "COOL", :dob => 10.years.ago, :sex => "male")
if c.save
  puts "MYCOUNT: #{Contact.count}"
else
  puts "EXPLOSIONS!!!"
end

Running this as part of the cucumber suite outputs this:

MYCOUNT: 0

So the contact record is obviously being saved (and passing validations) yet it is still not showing up when i call count??

Why??

I am using:

Rails 3.1rc5

rspec-rails

cucumber-rails

and

factory_girl_rails

I should also probably note i'm indexing my models using sunspot (solr API) https://github.com/outoftime/sunspot

Upvotes: 0

Views: 224

Answers (1)

Winfield
Winfield

Reputation: 19145

It sounds like you've got a transaction rollback firing within your test:

1) Transaction opened

2) Contact.save succeeds (now have legit Contact instance and db record)

3) Something goes wrong, raises ActiveRecord::Rollback

4) Transactions rolls back, leaving legit Contact instance but no db record, count = 0

I don't know what would cause this related to your Rails upgrade, but perhaps this will help you find what's failing.

EDIT:

If you tail your log/test.log file you should see a Rollback occur if this is the case. You can look at the previous DB activity to get a clue as to what the last successful db operation was before it.

Not an exact science, but may help you decide if this is the case and get a rough idea of where it went sideways.

Upvotes: 1

Related Questions