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 -~----------~----~----~----~------~----~------~--~---