Doesn't this break any code that specifically uses transactions within the app? 
 Such as debiting a credit balance of a customer and giving a product in return?

I've often thought this with these transaction-based test solutions.

I have seen some interesting implementations of DB teardown though.  One 
implementation I've seen puts an observer on the queries being run and when it 
sees a table being used in the queries, it performs teardown on just that 
table, so the majority of the schema that isn't used for an individual test is 
not re-built.

Anyway, drifting off-topic, I'm just wondering what my out-of-the-box behaviour 
should be with dm-rails, and if the schema should be wiped between tests, what 
have I not done when I removed AR from my project? :)



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.

Reply via email to