Tables deleted when running rake test:units

Hi there! I'm creating an application in RoR and I'm implementing unit testing in all my models.

When I run every test on his own (by running ruby test/unit/some_test.rb) all tests are successful.

But when I run all tests together (by running rake test:units) some tables from both databases (development e test) are deleted.

I'm using raw SQL (mysql) do create tables because I need composite primary keys and physical constraints so I figured it would be the best. Maybe this be the cause?

All my tests are in this form:

Simão Freitas wrote:

Hi there! I'm creating an application in RoR and I'm implementing unit testing in all my models.

When I run every test on his own (by running ruby test/unit/some_test.rb) all tests are successful.

Slightly off-topic tip: use RSpec instead of Test::Unit. It's a lot nicer.

But when I run all tests together (by running rake test:units) some tables from both databases (development e test) are deleted.

That's odd. What is your database.yml file like?

I'm using raw SQL (mysql) do create tables

With migrations or not?

because I need composite primary keys and physical constraints so I figured it would be the best.

BAD IDEA! Use the composite_primary_keys and foreigner plugins.

Maybe this be the cause?

Perhaps. Are all your tables mentioned in schema.rb?

All my tests are in this form: ----------------------- require File.dirname(FILE) + '/../test_helper' require File.dirname(FILE) + '/../../app/models/order'

class OrderTestCase < Test::Unit::TestCase

def setup

@order = Order.new(     :user_id => 1,     :total => 10.23,     :date => Date.today,     :status => 'processing',     :date_concluded => Date.today,     :user_address_user_id => 3,     :user_address_address_id => 5,     :creation_date => Date.today,     :update_date => Date.today   ) end

You probably should start using factories (I'm fond of Machinist for this).

################ Happy Path

def test_happy_path

assert @order.valid?, @order.errors.full_messages

end (...) ----------------------- The errors I get when running the tests are something like this:

3) Error: test_empty_is_primary(AddressTestCase): ActiveRecord::StatementInvalid: Mysql::Error: Table 'shopshop_enterprise_test.addresses' doesn't exist: SHOW FIELDS FROM addresses /test/unit/address_test.rb:9:in new' /test/unit/address_test.rb:9:insetup'

Any guesses? Thanks!

PS: When using postgres as the database engine, everything works fine with rake test:units! (of course, with the correct changes so the sql statements can work with postgres)

Best,

I didn't know about Rspec and Machinist. I'll try them thanks for the recommendation.

I'm using composite_primary_keys, I didn't explain myself well lol.

I don't use migrations.

OH! You're right! There are tables missing from the schema.rb file. Don't know the reason because when I ran the tests (and db creation previously) separately there was no error. Anyway, there's an error in every table that was missing, related to the BIT datatype. Something like this:

# Could not dump table "addresses" because of following StandardError # Unknown type 'bit(1)' for column 'is_primary'

So, maybe that datatype isn't supported? I think I'll just use TINYINTs lol

By the way, I don't have a very large knowledge about rails, i'm still figuring it out, but here's another question:

Can I use migrations with physical constraints in the database? Won't they become "nulled" and inconsistent after a migration or any change in the database? All that will be lost right?

Thanks a lot for your help!

Please quote when replying. It is very difficult to follow the conversation if you don't.

Simão Freitas wrote:

I didn't know about Rspec and Machinist. I'll try them thanks for the recommendation.

You're welcome.

I'm using composite_primary_keys, I didn't explain myself well lol.

I don't use migrations.

Well, start now! There are many advantages and virtually no disadvantages to using migrations.

OH! You're right! There are tables missing from the schema.rb file.

That would be a serious problem. The test framework uses rake db:schema:load to create the database.

Don't know the reason because when I ran the tests (and db creation previously) separately there was no error. Anyway, there's an error in every table that was missing, related to the BIT datatype. Something like this:

# Could not dump table "addresses" because of following StandardError # Unknown type 'bit(1)' for column 'is_primary'

So, maybe that datatype isn't supported? I think I'll just use TINYINTs lol

Use migrations and you won't have to worry, since Rails handles the abstraction.

By the way, I don't have a very large knowledge about rails, i'm still figuring it out, but here's another question:

Can I use migrations with physical constraints in the database?

You mean such as foreign key constraints?

Won't they become "nulled" and inconsistent after a migration or any change in the database?

What gives you that idea?

All that will be lost right?

No! Use the foreigner plugin like I suggested.

Thanks a lot for your help!

Best,

I fixed the problem of the "disappearing tables" with the following code in environment.rb:

config.active_record.schema_format = :sql

The problem was with some datatypes not recognized by rails (BIT(1) and (YEAR(4)) I guess. All works fine now.

But I'll do what you recommend and start using migrations!

Again, I can't thank you enough! Thanks a lot!

For the second time: please quote when replying!

Simão Freitas wrote:

I fixed the problem of the "disappearing tables" with the following code in environment.rb:

config.active_record.schema_format = :sql

The problem was with some datatypes not recognized by rails (BIT(1) and (YEAR(4)) I guess. All works fine now.

In most cases, if you have to use schema_format = :sql, something is wrong.

But I'll do what you recommend and start using migrations!

Again, I can't thank you enough! Thanks a lot!

You're welcome!

Best,

Marnen Laibow-Koser wrote:

For the second time: please quote when replying!

Sorry :X

Simão Freitas wrote:

I fixed the problem of the "disappearing tables" with the following code in environment.rb:

config.active_record.schema_format = :sql

The problem was with some datatypes not recognized by rails (BIT(1) and (YEAR(4)) I guess. All works fine now.

In most cases, if you have to use schema_format = :sql, something is wrong.

Hum.. I'll see what I can figure out! Thanks again