# Destory Test Case Messes up all tests

**URL:** <https://www.ruby-forum.com/t/destory-test-case-messes-up-all-tests/58420>\
**Category:** Rails\
**Created:** [April 21, 2006, 2:57pm UTC](https://www.ruby-forum.com/t/destory-test-case-messes-up-all-tests/58420 "2006-04-21T14:57:17Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Grant\_Speelman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/d6d6ee/32.png) [@Grant\_Speelman](https://www.ruby-forum.com/u/Grant_Speelman)\
**Post date:** [April 21, 2006, 2:57pm UTC](https://www.ruby-forum.com/t/destory-test-case-messes-up-all-tests/58420/1 "2006-04-21T14:57:17Z")

</div>

I am trying to create unit tests for my users model but when I add a  
test that destroys a user, that user is not available in any of the  
other test. If I remove the test that destroys the user all my other  
tests work again.  
All the fixtures are suppose be reloaded between tests right?

Here is my testcase :

require File.dirname( **FILE** ) + ‘/…/test\_helper’

class UserTest \< Test::Unit::TestCase  
fixtures :users

def setup

# get grant\_speelman user

@first\_user = User.find(1)  
end

# Test updating of a user

def test\_update  
assert\_equal @grant\_speelman.firstname, @first\_user.firstname  
assert\_equal @grant\_speelman.surname, @first\_user.surname  
assert\_equal @grant\_speelman.email, @first\_user.email

```
@first_user.firstname = "Gavin"
@first_user.surname = "Steenkamp"
@first_user.email = "removed_email_address@domain.invalid"

assert @first_user.save, @first_user.errors.full_messages.join("; ")
@first_user.reload

assert_equal "Gavin", @first_user.firstname
assert_equal "Steenkamp", @first_user.surname
assert_equal "removed_email_address@domain.invalid", @first_user.email

```

end

# Test deleting of user

def test\_destroy  
@first\_user.destroy  
assert\_raise(ActiveRecord::RecordNotFound)  
{User.find(@first\_user.id)}  
end  
end

Here is the model :

require “digest/sha1”

class User \< ActiveRecord::Base

has\_many :tasks  
has\_many :assigned\_tasks

attr\_accessor :password

validates\_presence\_of :firstname, :surname  
validates\_presence\_of :password, :on =\> :create  
validates\_confirmation\_of :password, :on =\> :create  
validates\_format\_of :email, :with =\> /^(.+)@(.+).[A-z]{2,6}$/  
validates\_uniqueness\_of :email

def self.login(email, password)  
hashed\_password = hashed\_password(password || “”)  
find(:first,  
:conditions =\> [“email = ? and hashed\_password = ?”, email,  
hashed\_password])  
end

def try\_to\_login  
User.login(self.email, self.password)  
end

def before\_create  
self.hashed\_password = User.hashed\_password(self.password)  
end

def after\_create  
@password = nil  
end

private  
def self.hashed\_password(password)  
Digest::SHA1.hexdigest(password)  
end  
end

Am I doing something wrong?

---

<div class="post-metadata">

**Author:** ![Grant\_Speelman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/d6d6ee/32.png) [@Grant\_Speelman](https://www.ruby-forum.com/u/Grant_Speelman)\
**Post date:** [April 21, 2006, 3:05pm UTC](https://www.ruby-forum.com/t/destory-test-case-messes-up-all-tests/58420/2 "2006-04-21T15:05:43Z")

</div>

Forgot to post the error message :

1. Error:  
test\_update(UserTest):  
ActiveRecord::RecordNotFound: Couldn’t find User with ID=1  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/base.rb:955:in  
`find_one' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/base.rb:941:in`find\_from\_ids’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/base.rb:382:in  
`find' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/fixtures.rb:401:in`find’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/fixtures.rb:227:in  
`instantiate_fixtures' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/fixtures.rb:225:in`each’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/fixtures.rb:225:in  
`instantiate_fixtures' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/fixtures.rb:224:in`silence’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/fixtures.rb:224:in  
`instantiate_fixtures' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/fixtures.rb:589:in`instantiate\_fixtures’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/fixtures.rb:588:in  
`each' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/fixtures.rb:588:in`instantiate\_fixtures’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/fixtures.rb:525:in  
`setup_with_fixtures' C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active_record/fixtures.rb:547:in`setup’  
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.14.0/lib/active\_record/fixtures.rb:546:in  
`setup’

2 tests, 1 assertions, 0 failures, 1 errors

---

<div class="post-metadata">

**Author:** ![Grant\_Speelman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/d6d6ee/32.png) [@Grant\_Speelman](https://www.ruby-forum.com/u/Grant_Speelman)\
**Post date:** [April 21, 2006, 4:20pm UTC](https://www.ruby-forum.com/t/destory-test-case-messes-up-all-tests/58420/3 "2006-04-21T16:20:06Z")

</div>

I find how to fix this problem :

quote from another post : (Re: Order of tests matters???)

— quote

The guide and the docs should really mention this problem. Transactional  
fixtures were turned on by default in Rails 1.0, to speed up testing.  
Unfortunately the default MySQL database type (MyISAM) doesn’t support  
transactional fixtures…

The quick fix is to put the following line at the top of your test class  
(inside the class)

self.use\_transactional\_fixtures = false

The alternative fix is to change your table type to InnoDB (assuming  
you’re using MySQL)

alter table products type=InnoDB;

Then you won’t have to worry and your tests will be faster…

— end quote
