So, manually wiping my test database now just means that the tests fail because the tables don't exist. Calling DataMapper.auto_migrate! in my setup doesn't seem to do anything. I Googling for "DataMapper Rails unit testing" doesn't seem to turn up anything useful. There's no section in the documentation that talks about testing. Would anybody mind sharing their approach to writing unit/functional tests for their Rails 3 applications that use DataMapper? I'm guessing this just isn't accounted for in the dm-rails project? Ian, how is your test schema kept up-to-date... do you just use "rake db:automigrate" when you've modified your schema?
There only seems to be a rake task to nuke my development (and as a side-effect my test) database... not one to just reload the test DB. El 10/05/2011, a las 16:49, Ian MacLeod escribió: > I can't directly answer why it's not tearing down your test database, > but I've had a lot of luck using https://github.com/bmabey/database_cleaner > to ensure a clean slate between each test - and it's quick about it! > It starts a transaction at the start of a test, and rolls back when > the test is over > > -Ian > > On May 9, 11:43 pm, Chris Corbyn <[email protected]> wrote: >> Hi All, >> >> I'm not sure what I'm missing, but I had a project that started with >> ActiveRecord, which I then subsequently swapped to use DataMapper, by adding >> the gem and only requiring selected parts of rails into my application.rb. >> >> I have these included in application.rb: >> >> require "action_controller/railtie" >> require "action_mailer/railtie" >> require "rails/test_unit/railtie" >> >> When I run my unit tests, any data inserted into the database during the >> test is left there, dirtying the state for the next test. I can't see what >> I've missed, comparing my project with a blank one created using: >> >> rails new datamapper_project -mhttp://datamapper.org/templates/rails.rb >> >> Can anyone shed any light on this? I had disabled fixtures (because I don't >> use them), but this should affect it. Oddly, when I put "fixtures :all" >> back in the test_helper.rb, the test runner crashes with: >> >> /home/ccorbyn/projects/flippa-rails/test/test_helper.rb:6:in >> `<class:TestCase>': undefined method `fixtures' for >> ActiveSupport::TestCase:Class (NoMethodError) >> from /home/ccorbyn/projects/flippa-rails/test/test_helper.rb:5:in >> `<top (required)>' >> from test/unit/user_test.rb:1:in `require' >> from test/unit/user_test.rb:1:in `<top (required)>' >> from >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake/rake_test_load >> er.rb:5:in `load' >> from >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake/rake_test_load >> er.rb:5:in `block in <main>' >> from >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake/rake_test_load >> er.rb:5:in `each' >> from >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake/rake_test_load >> er.rb:5:in `<main>' >> >> Surely projects without AR still have their test databases torn down after >> each test, right? >> >> class ActiveSupport::TestCase >> fixtures :all >> end >> >> Here's a little test showing the issue: >> >> class UserTest < ActiveSupport::TestCase >> test "user should be created" do >> user = User.new >> user.username = "testing" >> user.full_name = "Test User" >> assert user.save, "User should be saved" >> end >> >> test "no users should exist by default" do >> assert_equal 0, User.count, "No users should exist by >> default" >> end >> end >> >> Which fails with: >> >> 1) Failure: >> test_no_users_should_exist_by_default(UserTest) [test/unit/user_test.rb:12]: >> No users should exist by default. >> <0> expected but was >> <69>. >> >> 2) Error: >> test_user_should_be_created(UserTest): >> DataObjects::IntegrityError: Duplicate entry 'testing' for key 2 >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adap >> ter/adapter.rb:114:in `execute_non_query' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adap >> ter/adapter.rb:114:in `block (2 levels) in create' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adap >> ter/adapter.rb:276:in `with_connection' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adap >> ter/adapter.rb:113:in `block in create' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adap >> ter/adapter.rb:85:in `each' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-do-adapter-1.1.0/lib/dm-do-adap >> ter/adapter.rb:85:in `create' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/reposito >> ry.rb:146:in `create' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> /state/transient.rb:61:in `create_resource' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> /state/transient.rb:25:in `commit' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:957:in `_persist' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:971:in `block in create_with_hooks' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:968:in `catch' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:968:in `create_with_hooks' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:1022:in `save_self' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:1007:in `block in _save' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:1223:in `run_once' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:1006:in `_save' >> >> /usr/local/rvm/gems/ruby-1.9.2-p180/gems/dm-core-1.1.0/lib/dm-core/resource >> .rb:406:in `save' >> test/unit/user_test.rb:8:in `block in <class:UserTest>' >> >> Something really weird is happening. That number <69> goes up by one every >> time I run this test. >> >> Cheers, >> >> Chris > > -- > You received this message because you are subscribed to the Google Groups > "DataMapper" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/datamapper?hl=en. > -- You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/datamapper?hl=en.
