我运行一个 Rails 应用程序,我们正在将注册流程拆分为一个单独的应用程序。注册应用程序有自己独立的数据库(用于 CMS 和收集潜在客户),但它还需要访问主数据库。使用这个效果非常好ActiveRecord::Base.establish_connection
.
但是,我希望能够编写一些规范。问题是,如何在每次测试运行时都不清除开发数据库的情况下编写规范/测试?如果我在测试模式下进入控制台,很明显测试模式已从我的主应用程序连接到开发数据库中。
我的 database.yml 文件如下所示:
development:
database: signup_dev
test:
database: signup_test
main_app_dev:
database: main_app_dev
main_app_test:
database: main_app_test
根据这个文件,我想establish_connection
连接到数据库my_app_dev
在开发模式下,以及my_app_test
在测试模式下。有任何想法吗?
我们有一个 gem,它基本上是连接到我们的遗留系统的 ActiveRecord 模型的集合。在我们的例子中,我们将所有这些模型包含在一个模块中,与旧数据库相关的所有模型都从该模块连接。
module Legacy
class Base < ActiveRecord::Base
establish_connection :legacy
end
class User < Base
end
end
通过此设置,可以非常轻松地切换数据库连接。如果您真的想要自动检测,您可以将逻辑放入基类中来确定要使用哪个数据库:
module Legacy
class Base < ActiveRecord::Base
if Rails.env == 'test'
establish_connection :legacy_test
else
establish_connection :legacy
end
end
或者简单地告诉您的模块在规范助手中使用哪个连接:
# spec/spec_helper.rb
Legacy::Base.establish_connection(ActiveRecord::Base.configurations['legacy_test'])
我个人会推荐第二种选择。当然,这两种解决方案都依赖于命名空间模型。
Peer
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)