DatabaseCleaner / database_cleaner-active_record

Strategies for cleaning databases using ActiveRecord. Can be used to ensure a clean state for testing.
MIT License
56 stars 58 forks source link

Can't seem to get :truncation to work with MS SQL Server #8

Open msmith1114 opened 6 years ago

msmith1114 commented 6 years ago

Hi, so im at wits end trying to get this to work. Right now were connecting to MS SQL Server (2014) VM using the Activerecord gem for SQL Server: gem 'activerecord-sqlserver-adapter'

I can't seem to get DB Cleaner to work with this. It's worked great in the past using capybara/selenium webdriver.

I know you have to set it to use truncation strategy, but even putting:

    DatabaseCleaner.strategy = :truncation
    DatabaseCleaner.clean_with(:truncation)
    DatabaseCleaner.start

at the beginning of a "it" rspec test, it complains about invalid object name instantly once it gets to that test:

   Failure/Error: DatabaseCleaner.clean_with(:truncation)
    ActiveRecord::StatementInvalid:
       TinyTds::Error: Invalid object name 'user_table'.: DELETE FROM [user_table];

(user_table is just an example here)

I ensured it's connecting to the right database because when I take out Database cleaner it works just fine and I can see the database being populated correctly. So I know my database.yml is set up correctly.

Im not really sure what to try here, or if it's just an incompatibility with SQL Server perhaps? I can't seem to find many examples of people using DB Cleaner and SQL Server.

etagwerker commented 6 years ago

@msmith1114 Please post more information about your test setup code. Does it look exactly like the example? https://github.com/DatabaseCleaner/database_cleaner#rspec-example

kulkarni2u commented 4 years ago

Any luck with this, even we are facing a similar issue with MS SQL Server. Tried truncation deletion and transaction strategies with no luck. Below is the RSpec config code we have.

RSpec.configure do |config|
  config.before(:suite) do
    sequel = DatabaseCleaner[
      :sequel,
      { connection: DB }
    ]

    sequel.strategy = :transaction
    sequel.clean_with(:transaction)

    # redis config
    redis = DatabaseCleaner[
      :redis,
      { connection: TimePlus::Settings::REDIS_URL }
    ]

    redis.strategy = :truncation
    redis.clean_with(:truncation)
  end

  config.after(:each) do |example|
    DatabaseCleaner.clean
  end
end

The same code above was working fine with Postgres, we are switching to MS SQL Server and our specs are failing.