Unit testing methods interfering with each other


#1

Hi all,

I am following the Agile Rails book and have a problem with unit
testing. Here is my products test file:

require File.dirname(FILE) + ‘/…/test_helper’

class ProductTest < Test::Unit::TestCase

fixtures :products

def setup
@product = Product.find 1
end

def test_load_in_db
assert_kind_of Product, @product
assert_equal 29.95, @product.price
end

def test_destroy
@product.destroy
assert_raise(ActiveRecord::RecordNotFound) { Product.find
@product.id }
end

end

According to the book this should work, as different tests are not
dependent on each other, e.g. the destroy test should be independent
of the load_in_db test. I do howeveg get this after running the test:

:!ruby test/unit/product_test.rb
Loaded suite test/unit/product_test
Started
.E
Finished in 0.259161 seconds.

  1. Error:
    test_load_in_db(ProductTest):
    ActiveRecord::RecordNotFound: Couldn’t find Product with ID=1
    /opt2/local/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/
    active_record/base.rb:428:in find' test/unit/product_test.rb:8:insetup_without_fixtures’
    /opt2/local/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/
    active_record/fixtures.rb:522:in setup' /opt2/local/lib/ruby/gems/1.8/gems/activerecord-1.13.0/lib/ active_record/fixtures.rb:520:insetup’

2 tests, 1 assertions, 0 failures, 1 errors

If I remove the destroy test everything works as expected?

Any ideas as to why this is happening?

Many thanks in advance,
Nicky


#2

OK, found it. Has to do with the fact that Rails 0.14 switched to
transactional fixtures which my MySQL table type did not support.
More details here: http://www.clarkware.com/cgi/blosxom/
2005/10/24#Rails10FastTesting

Cheers,
– Nicky