【问题标题】:database_cleaner without database.yml and multiple databases没有 database.yml 和多个数据库的 database_cleaner
【发布时间】:2013-01-17 12:28:10
【问题描述】:

我有一个非 Rails 应用程序的黄瓜测试。

我的项目中没有 database.yml,并且由于某些原因不想拥有它(连接设置以稍微不同的格式存储)。

我有几个数据库模型,定义如下

class MyBase < ActiveRecord::Base
  self.abstract_class = true

  def self.some_extra_methods
  end 
end

class DatabaseA < MyBase
  self.abstract_class = true
  establish_connection ($configA)
end

class DatabaseB < MyBase
  self.abstract_class = true
  establish_connection ($configB)
end

# if i will not connect ActiveRecord::Base to something i get ActiveRecord::ConnectionNotEstablished errors 
# is there a better solution?
ActiveRecord::Base.establish_connection $configC;

class TableA < DatabaseA
  self.table_name =  :table_a
  self.primary_key = :id
end
#... and other tables

class TableB < DatabaseB
  self.table_name =  :table_b
  self.primary_key = :id
end
#... and other tables

现在要清理我正在尝试使用以下代码的数据库。 我没有 database.yml 所以我只是传递模型。

DatabaseCleaner[:active_record, {:model => DatabaseA} ].strategy = :truncation
DatabaseCleaner[:active_record, {:model => DatabaseB} ].strategy = :truncation

Before do
  DatabaseCleaner.start
end

After do
  DatabaseCleaner.clean
end 

但它只清理由 ActiveRecord::Base 连接的数据库,而不是 DatabaseA 和 DatabaseB 怎么了?

【问题讨论】:

    标签: ruby-on-rails ruby cucumber database-cleaner


    【解决方案1】:

    我认为,这个要点正是您所需要的:https://gist.github.com/1109325 代码看起来很奇怪,但它可以工作。

    【讨论】:

    • 谢谢,它几乎可以工作,但是:1)实际上我想对不同的数据库使用一些不同的清理策略(据称在 database_cleaner 中支持)。在那个脚本中实际上只有最后一个 DatabaseCleaner.strategy = :deletion 总是获胜,我需要对不同的数据库有不同的例外。 2)它看起来很奇怪,而且不干燥。 :)
    • 据我所知,database_clearner 仅支持不同 ORM 的不同策略(请参阅goo.gl/JWMb8),因此您唯一的选择是分叉 database_cleaner 并更改其行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2023-03-06
    • 2013-06-30
    相关资源
    最近更新 更多