2

Sequel を使用している Rails 以外のアプリで DatabaseCleaner を実行しようとしていますが、さまざまな問題が発生しています。DB が正しくセットアップされていないようです -

RSpec.configure do |config|
  config.before(:suite) do    
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with(:truncation)
    p DatabaseCleaner.connections
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

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

rspec を実行すると -

ruby-1.9.2-p290/gems/database_cleaner-0.8.0/lib/database_cleaner/sequel/truncation.rb:12:in `clean': undefined method `url' for :default:Symbol (NoMethodError)
  from /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.8.0/lib/database_cleaner/base.rb:39:in `clean_with'
  from /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.8.0/lib/database_cleaner/configuration.rb:62:in `block in clean_with'
  from /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.8.0/lib/database_cleaner/configuration.rb:62:in `each'
  from /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.8.0/lib/database_cleaner/configuration.rb:62:in `clean_with'

これが失敗している行 -

case db_type= db.url.sub(/:.+/,'').to_sym

「DatabaseCleaner.clean_with(:truncation)」を削除すると、次のようになります。DB が :test ではなく :default に設定されていることに注意してください。

[#<DatabaseCleaner::Base:0x007fdbe41825f0 @autodetected=true, @orm=:sequel, @strategy=#<DatabaseCleaner::Sequel::Transaction:0x007fdbe416b328 @db=:default>>]

An error occurred in an after hook
NoMethodError: undefined method `resume' for nil:NilClass occurred at /Users/tim/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.8.0/lib/database_cleaner/sequel/transaction.rb:22:in `clean'

どちらのエラーも、DB が設定されていないことを示していますが、その理由はわかりません。何か案は?

4

3 に答える 3

3

これは database_cleaner で修正されています ( https://github.com/bmabey/database_cleaner/commit/adb0d438dbfabaea2588f3058b1e75914706e53dを参照) が、修正を含む新しいリリースがあるようには見えません。新しいリリースが出るまでは、git バージョンを使用する必要があります。

于 2012-07-30T15:30:00.973 に答える
1

私も同じ問題を抱えていました。database_cleaner次のバージョンが出るまで、Gemfileを置き換えました。

group :test do
  # The release version does not support sequel properly. See
  # https://github.com/bmabey/database_cleaner/commit/e5cb8cea.
  # FIXME: Update this, when DatabaseCleaner 0.8.1 is released!
  gem 'database_cleaner', :git => "git://github.com/bmabey/database_cleaner.git", 
    :ref => "e5cb8cea"
end
于 2012-07-30T22:26:04.153 に答える
0

私は DatabaseCleaner との [接続] を明示的に定義していません。これを行う方法については、ドキュメントのどこにもありません。

次のように、既存の接続を DatabaseCleaner に渡すことができます。

connection = Sequel.connect("mysql2://user:password@host:port/database_name")
DatabaseCleaner[:sequel, { :connection => connection) }]
于 2013-12-11T18:57:07.613 に答える