You need to do that manually. All that fixtures and sweeping stuff is built into rails for ActiveRecord only. The dm-sweatshop gem is what I use, different from fixtures but I never used fixtures anyway.
I use this method: https://gist.github.com/964844 but as you said, it won't work with nested transactions. You can use the database_cleaner gem as Ian mentioned, you don't have to use transactions with it. Or you can do DataMapper.auto_migrate! in your setup method. Not sure why it isn't working for you, make sure you followed the setup stuff in the dm-rails readme. There is no rake db:test:automigrate but you can just use env variables like normal: RAILS_ENV=test rake db:automigrate (etc) On May 10, 7:10 am, Chris Corbyn <[email protected]> wrote: > 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 usinghttps://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 > > athttp://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.
