Hi,
I''m using an sqlite3 database with Rails and have some trouble running
unit tests
What I''ve done is
* rails my_app
* edited database.yml to use sqlite3 adapter, db/my_app_development
and db/my_app_test
* ruby script\generate model user
* edited model
class User < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
end
* edited db/migrate/001_create_users.rb migration:
def self.up
create_table :users do |t|
t.column :name, :string, :null => false
end
User.create(:name => ''administrator'')
end
* and:
def self.down
drop_table :users
end
* rake db:migrate
* rake db:test:prepare
At this point, the 2 DBs are created correctly.
* rake test:units
The problem is that, but when I want to run a (any) test, I get a "SQL
logic error or missing database (SQLite3::SQLException). I can however
access the DB via the sqlite3 client/rails console without any
problem.
Here''s the exact error message I get:
Loaded suite C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.3/
lib/rake/rake_test_loader
Started
EC:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1-
mswin32/lib/sqlite3/errors.rb:94:in `check'': SQL logic error or
missing database (SQLite3::SQLException)
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:76:in `check''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:68:in `commence''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:61:in `initialize''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/statement.rb:163:in `new''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/statement.rb:163:in `execute''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/database.rb:212:in `execute''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/database.rb:187:in `prepare''
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
ruby-1.2.1-mswin32/lib/sqlite3/database.rb:211:in `execute''
... 16 levels...
from C:/InstantRails/ruby/lib/ruby/1.8/test/unit/autorunner.rb:
200:in `run''
from C:/InstantRails/ruby/lib/ruby/1.8/test/unit/autorunner.rb:
13:in `run''
from C:/InstantRails/ruby/lib/ruby/1.8/test/unit.rb:278
from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.3/
lib/rake/rake_test_loader.rb:5
I''m using Rails 1.2.3 with ruby 1.8.5, sqlite3.3.7 and sqlite3-ruby
(1.2.1)
Any help would be greatly appreciated!
Thanks in advance,
Frédéric Delanoy
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
I''ve seen that "logic error" where there was a COMMIT or
ROLLBACK, but
no transaction was in flight. This is an Exception (not an Error), and
Test::Unit doesn''t catch them, unfortunately.
Somewhere within this line:
... 16 levels...
is your unit test code.
To debug it, modify something like execute in sqlite3/database.rb to
do the following:
rescue Exception => e
puts e.message
puts e.backtrace
raise
end
so that you can see those "16 levels".
Alex
On 6/2/07, Nexos
<frederic.delanoy-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:>
> Hi,
>
> I''m using an sqlite3 database with Rails and have some trouble
running
> unit tests
>
> What I''ve done is
> * rails my_app
> * edited database.yml to use sqlite3 adapter, db/my_app_development
> and db/my_app_test
> * ruby script\generate model user
> * edited model
>
> class User < ActiveRecord::Base
> validates_presence_of :name
> validates_uniqueness_of :name
> end
>
> * edited db/migrate/001_create_users.rb migration:
>
> def self.up
> create_table :users do |t|
> t.column :name, :string, :null => false
> end
> User.create(:name => ''administrator'')
> end
>
> * and:
>
> def self.down
> drop_table :users
> end
>
> * rake db:migrate
> * rake db:test:prepare
>
> At this point, the 2 DBs are created correctly.
>
> * rake test:units
>
> The problem is that, but when I want to run a (any) test, I get a "SQL
> logic error or missing database (SQLite3::SQLException). I can however
> access the DB via the sqlite3 client/rails console without any
> problem.
>
> Here''s the exact error message I get:
>
> Loaded suite C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.3/
> lib/rake/rake_test_loader
> Started
> EC:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1-
> mswin32/lib/sqlite3/errors.rb:94:in `check'': SQL logic error or
> missing database (SQLite3::SQLException)
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:76:in `check''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:68:in `commence''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:61:in `initialize''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/statement.rb:163:in `new''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/statement.rb:163:in `execute''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/database.rb:212:in `execute''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/database.rb:187:in `prepare''
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-
> ruby-1.2.1-mswin32/lib/sqlite3/database.rb:211:in `execute''
> ... 16 levels...
> from C:/InstantRails/ruby/lib/ruby/1.8/test/unit/autorunner.rb:
> 200:in `run''
> from C:/InstantRails/ruby/lib/ruby/1.8/test/unit/autorunner.rb:
> 13:in `run''
> from C:/InstantRails/ruby/lib/ruby/1.8/test/unit.rb:278
> from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.3/
> lib/rake/rake_test_loader.rb:5
>
> I''m using Rails 1.2.3 with ruby 1.8.5, sqlite3.3.7 and
sqlite3-ruby
> (1.2.1)
> Any help would be greatly appreciated!
>
> Thanks in advance,
>
> Frédéric Delanoy
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
I''ve finally found the source of the problem: it was due to the default fixtures in use, i.e. first id: 1 second id: 2 After adding a (mandatory in my model) name attribute in the fixture, like first id: 1 name: foo second id:2 name: bar it worked. However, what''s odd is that evenif I commented the line fixtures :users in the unit test file, I had the some error. Maybe the fixtures are used automagically ??? In all cases, thank you for your help Alexey ! Frédéric On 2 juin, 18:33, "Alexey Verkhovsky" <alexey.verkhov...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I''ve seen that "logic error" where there was a COMMIT or ROLLBACK, but > no transaction was in flight. This is an Exception (not an Error), and > Test::Unit doesn''t catch them, unfortunately. > > Somewhere within this line: > ... 16 levels... > is your unit test code. > > To debug it, modify something like execute in sqlite3/database.rb to > do the following: > > rescue Exception => e > puts e.message > puts e.backtrace > raise > end > > so that you can see those "16 levels". > > Alex > > On 6/2/07, Nexos <frederic.dela...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > Hi, > > > I''m using an sqlite3 database with Rails and have some trouble running > > unit tests > > > What I''ve done is > > * rails my_app > > * edited database.yml to use sqlite3 adapter, db/my_app_development > > and db/my_app_test > > * ruby script\generate model user > > * edited model > > > class User < ActiveRecord::Base > > validates_presence_of :name > > validates_uniqueness_of :name > > end > > > * edited db/migrate/001_create_users.rb migration: > > > def self.up > > create_table :users do |t| > > t.column :name, :string, :null => false > > end > > User.create(:name => ''administrator'') > > end > > > * and: > > > def self.down > > drop_table :users > > end > > > * rake db:migrate > > * rake db:test:prepare > > > At this point, the 2 DBs are created correctly. > > > * rake test:units > > > The problem is that, but when I want to run a (any) test, I get a "SQL > > logic error or missing database (SQLite3::SQLException). I can however > > access the DB via the sqlite3 client/rails console without any > > problem. > > > Here''s the exact error message I get: > > > Loaded suite C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.3/ > > lib/rake/rake_test_loader > > Started > > EC:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.1- > > mswin32/lib/sqlite3/errors.rb:94:in `check'': SQL logic error or > > missing database (SQLite3::SQLException) > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:76:in `check'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:68:in `commence'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/resultset.rb:61:in `initialize'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/statement.rb:163:in `new'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/statement.rb:163:in `execute'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/database.rb:212:in `execute'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/database.rb:187:in `prepare'' > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/sqlite3- > > ruby-1.2.1-mswin32/lib/sqlite3/database.rb:211:in `execute'' > > ... 16 levels... > > from C:/InstantRails/ruby/lib/ruby/1.8/test/unit/autorunner.rb: > > 200:in `run'' > > from C:/InstantRails/ruby/lib/ruby/1.8/test/unit/autorunner.rb: > > 13:in `run'' > > from C:/InstantRails/ruby/lib/ruby/1.8/test/unit.rb:278 > > from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rake-0.7.3/ > > lib/rake/rake_test_loader.rb:5 > > > I''m using Rails 1.2.3 with ruby 1.8.5, sqlite3.3.7 and sqlite3-ruby > > (1.2.1) > > Any help would be greatly appreciated! > > > Thanks in advance, > > > Frédéric Delanoy--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---