Skip to content

Not compatible with ruby 3.0 #16

Description

@rubydev

After upgrade Ruby to version 3.0.1 code is crashing:

config.before(:suite) do
  DatabaseCleaner[:mongoid].strategy = :deletion, { except: %w[roles exchange_rates] }
end
An error occurred in a `before(:suite)` hook.
Failure/Error: DatabaseCleaner[:mongoid].strategy = :deletion, { except: %w[roles exchange_rates] }

ArgumentError:
  wrong number of arguments (given 1, expected 0)
# /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-mongoid-2.0.1/lib/database_cleaner/mongoid/deletion.rb:9:in `initialize'
# /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:85:in `new'
# /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:85:in `create_strategy'
# /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:45:in `strategy='
# ./spec/rails_helper.rb:32:in `block (2 levels) in <top (required)>'

It looks, that it is related with DatabaseCleaner/database_cleaner#677

Activity

  1. botandrose commented on May 18, 2021

    @botandrose
    Contributor

    @rubydev Yes, that syntax no longer works in Ruby 3.0... you'll need to pass an array instead:

    config.before(:suite) do
       DatabaseCleaner[:mongoid].strategy = [:deletion, except: %w[roles exchange_rates]]
    end

    I've updated the README to that syntax, while I was at it. I wonder if its possible to do a deprecation warning in < Ruby 3.0, and a more helpful error message in >= Ruby 3.0?

  2. rubydev commented on Jun 11, 2021

    @rubydev
    Author

    @botandrose Hello, thank you! But after change to array, result is same:

    An error occurred in a `before(:suite)` hook.
    Failure/Error: DatabaseCleaner[:mongoid].strategy = [:deletion, except: %w[roles exchange_rates]]
    
    ArgumentError:
      wrong number of arguments (given 1, expected 0)
    # /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-mongoid-2.0.1/lib/database_cleaner/mongoid/deletion.rb:9:in `initialize'
    # /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:85:in `new'
    # /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:85:in `create_strategy'
    # /Users/marian/.rvm/gems/ruby-3.0.1@gre/gems/database_cleaner-core-2.0.1/lib/database_cleaner/cleaner.rb:45:in `strategy='
    # ./spec/rails_helper.rb:32:in `block (2 levels) in <top (required)>'
    

    Any idea why it doesn't work? Thank you!

  3. tstaetter commented on Nov 14, 2021

    @tstaetter

    same here, any solutions?

  4. tstaetter commented on Nov 15, 2021

    @tstaetter

    found a solution, works for me:

    # inside rails_helper.rb
    RSpec.configure do |config|
    ...
      # Clean DB after testing
      config.before :each do
        strategy = DatabaseCleaner::Mongoid::Deletion.new except: %w[<your collection names here>]
        DatabaseCleaner[:mongoid].instance_variable_set :'@strategy', strategy
        DatabaseCleaner[:mongoid].start
      end
    
      config.after do
        DatabaseCleaner[:mongoid].clean
      end
    end
    
  5. rgaufman commented on Nov 21, 2021

    @rgaufman

    Thank you, that works for me too!

  6. ivanoblomov commented on Nov 17, 2024

    @ivanoblomov

    Until this is fixed, this setting seems to work:

    Cucumber::Rails::Database.autorun_database_cleaner = false
  7. added a commit that references this issue on Nov 17, 2024
  8. rgaufman commented on Feb 16, 2025

    @rgaufman

    Any update on this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions