使用多个数据库测试Rails应用程序

jav*_*ier 6 ruby database testing activerecord ruby-on-rails

我有一个rails应用程序,它在生产环境中使用两个数据库,UsersProcess.该Users模型使用此自定义ActiveRecord类:

class UserActiveRecord < ActiveRecord::Base
    establish_connection "#{Rails.env}_users_db"
end

class User < UserActiveRecord
    ...
Run Code Online (Sandbox Code Playgroud)

请注意,根据环境建立与特定数据库的连接.为简化起见,在测试环境中我有一个包含两个生产数据库中所有表的数据库,我的database.yml文件如下所示:

test:
    adapter: postgresql
    database: db_test
    host: localhost
    pool: ...
    timeout: ...
    username: ...
    password: ...

test_users_db:
    adapter: postgresql
    database: db_test  <--- Notice that this is the same database only in test env
    host: localhost
    pool: ...
    timeout: ...
    username: ...
    password: ...
Run Code Online (Sandbox Code Playgroud)

应用程序在生产中运行良好,但是当我运行任何引用User该类的测试时,测试会在确切的位置User使用并且没有任何反应,它不显示任何错误,它不会退出,它只是保持等候.

我仔细检查并且表USERS存在于测试数据库中,实际上如果我手动删除它,我会得到表不存在的错误,当我再次创建它时,我得到了上一段中报告的相同行为.

我不知道为什么会发生这种情况,我对如何解决这个问题有任何想法?或者我如何调试它以便我可以找到问题的根源?如果它有帮助,我使用Ruby 1.9.3,Ruby on Rails 3.2.19和PostgreSQL 9.3.5; 任何其他详细信息将根据需要发布.

小智 0

您是否尝试过明确声明它是同一个数据库?尝试编辑您的database.yml文件,使其看起来像这样:

test: &default_test
    adapter: postgresql
    database: db_test
    host: localhost
    pool: ...
    timeout: ...
    username: ...
    password: ...

test_users_db:
    <<: *default_test 
Run Code Online (Sandbox Code Playgroud)