database_cleaner-active_record icon indicating copy to clipboard operation
database_cleaner-active_record copied to clipboard

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

Open msmith1114 opened this issue 8 years ago • 2 comments

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.

msmith1114 avatar Oct 09 '17 19:10 msmith1114

@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

etagwerker avatar Nov 22 '17 03:11 etagwerker

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.

kulkarni2u avatar Oct 24 '19 16:10 kulkarni2u