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:
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
################ 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:
- 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)
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:
- 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,
Marnen Laibow-Koser
http://www.marnen.org
[email protected]
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!
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!
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,
Marnen Laibow-Koser
http://www.marnen.org
[email protected]
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
http://www.marnen.org
[email protected]
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
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
http://www.marnen.org
[email protected]