Problems with testing/Wrong table columns

Hello,

I’m new in rails developing and I’m just writing my first application.
I already created some controllers and models and it works.
But now I want to write some tests for my application, but I got
problems.

I wrote one unit test for one model:

test “test_should_create_a_component” do
assert Component.create(:project_id => 1, :category_id => 1, :text
=> ‘Test’)
end

When I run “rake test” I get this message:

D:/Programme/InstantRails-2.0/ruby/bin/ruby.exe -I"lib;test" “D:/
Programme/InstantRails-2.0/ruby/lib/rubygems1.8/gems/rake-0.8.7/lib/
rake/rake_test_loader.rb” “test/unit/component_test.rb”
Loaded suite D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
rake-0.8.
7/lib/rake/rake_test_loader
Started
E
Finished in 0.453 seconds.

  1. Error:
    test_test_should_create_a_component(ComponentTest):
    ActiveRecord::StatementInvalid: Mysql::Error: Unknown column ‘integer’
    in ‘field list’: INSERT INTO brands (integer, id, string)
    VALUES (NULL, 996332877, NULL)

(…after that the lines of the code trace)

There is definitely no column integer or string in the model. Why does
rails ask for this columns?
I don’t know where to look for the problem…

To check wether it is an problem of my application or of my rails
environment I created another demo application with only one model and
one test and there I get another error without description, only this:

D:\Programme\InstantRails-2.0\rails_apps\home>rake test
(in D:/Programme/InstantRails-2.0/rails_apps/home)
D:/Programme/InstantRails-2.0/ruby/bin/ruby.exe -I"lib;test" “D:/
Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/
rake/rake_test_loader.rb”
D:/Programme/InstantRails-2.0/ruby/bin/ruby.exe -I"lib;test" “D:/
Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/
rake/rake_test_loader.rb”

Errors running test:units!

I’m confused, can you help me?
Thanks in advance :slight_smile:

bye
krani

I am not sure but could this be an error in your test fixture file? It
could be trying to load the test database from the fixture and failing
because the syntax of your fixture yml file is wrong.

Colin

2009/5/19 krani [email protected]

Hi,

thanks for your reply

I don’t think that there is a problem with my fixtures. I have only
one:

one:
project_id:1
category_id:1
name:
text:KN Airintake Kit
created_at:
updated_at:

regards
krani

I did not look carefully enough at the output, I see now that it has
actually started the test and is in test_test_should_create_a_component.
You should be able to see from the trace where in your application it
generated the faulty sql, though sometimes you have to examine the trace
carefully to find the bits that are in your code and the bits that are
in
Rails. This might give you a clue. If you can’t work it out post the
trace.

It would also be worth having a look at db/schema.rb just to check what
it
thinks the tables should look like. Post that also if necessary.

Colin

2009/5/20 krani [email protected]

Hi

thanks for your help :slight_smile:

The complete trace:

D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/connection_adapters/
abstract_adapter.rb:188:in log' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/connection_adapters/ mysql_adapter.rb:309:inexecute’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/connection_adapters/abstract/
database_statements.rb:147:in insert_fixture' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/fixtures.rb:640:ininsert_fixtures’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:577:in each' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/fixtures.rb:577:ininsert_fixtures’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:520:in
create_fixtures' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/fixtures.rb:520:ineach’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:520:in
create_fixtures' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/connection_adapters/abstract/ database_statements.rb:66:intransaction’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:518:in
create_fixtures' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/connection_adapters/ mysql_adapter.rb:254:indisable_referential_integrity’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:509:in
create_fixtures' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/base.rb:1398:insilence’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:508:in
create_fixtures' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activerecord-2.2.2/lib/active_record/fixtures.rb:964:inload_fixtures’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activerecord-2.2.2/lib/active_record/fixtures.rb:930:in
setup_fixtures' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activesupport-2.2.2/lib/active_support/callbacks.rb:178:insend’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.2.2/lib/active_support/callbacks.rb:178:in
evaluate_method' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activesupport-2.2.2/lib/active_support/callbacks.rb:166:incall’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.2.2/lib/active_support/callbacks.rb:90:in run' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activesupport-2.2.2/lib/active_support/callbacks.rb:90:ineach’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.2.2/lib/active_support/callbacks.rb:90:in send' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activesupport-2.2.2/lib/active_support/callbacks.rb:90:inrun’
D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/
activesupport-2.2.2/lib/active_support/callbacks.rb:277:in
run_callbacks' D:/Programme/InstantRails-2.0/ruby/lib/ruby/gems/1.8/gems/ activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb: 58:inrun’

Unfortunately I don’t understand what rails want to tell me with this
trace…

I don’t think that there is a problem in schema.rb. This is the
definition for the component model:

create_table “components”, :force => true do |t|
t.integer “project_id”
t.integer “category_id”
t.string “name”
t.text “text”
t.datetime “created_at”
t.datetime “updated_at”
end

bye
krani

Thank you!

For whatever reason there were faulty definitions in the fixtures of
other models.

Now it works :slight_smile:

Thanks everybody who tried to help me!

On May 24, 7:19 pm, krani [email protected] wrote:

t.text     "text"
t.datetime "created_at"
t.datetime "updated_at"

end

The error occurs when loading the fixtures for brand. You should
probably look at the fixtures file or schema for that table.

Fred