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?
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'
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)
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?
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?