首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对单个单元测试使用特定的RAILS_ENV

对单个单元测试使用特定的RAILS_ENV
EN

Stack Overflow用户
提问于 2016-01-06 17:25:40
回答 1查看 187关注 0票数 1

我有一个特定的测试,我想写,以检查回归。我继承了一个没有单元测试的Rails环境,并且很少有通过外部(Rails之外)方法进入数据库的防护措施。

单元测试将迭代数据库中的特定模型并呈现视图,确保每个实例仍然可以在该视图中正确呈现。我想对一个开发数据库实例运行它,它通常是生产数据库(mysql)的一个克隆。

数据太大了不能放进固定装置..。我想使用“test”sqlite数据库保存其余的测试。

那么-是否有一种方法可以覆盖连接到哪个数据库Rails的单个测试?

我使用的是Rails 3.2.22。

编辑:

基于Babar's answer,我使用:

代码语言:javascript
复制
class MyTest < ActionController::TestCase

  def setup                                                                     
    @controller = MyController.new                                       
  end                                                                           

  test "should successfully render all" do                            
    begin                                                                       
      connection_config = ActiveRecord::Base.connection_config()                
      ActiveRecord::Base.establish_connection('development')                    
      MyModel.find_each do |i|                                        
        print "#{i.id} - #{i.name}\n"                           
        get(:show, {'name' => i.name})                                  
      end                                                                       
    ensure                                                                      
      ActiveRecord::Base.establish_connection(connection_config)                
      # or ActiveRecord::Base.establish_connection(ENV['RAILS_ENV'])                
    end                                                                         
  end                                                                           
end      

但我在尝试回滚时遇到了一个例外。我认为这是因为测试最初是围绕一个事务包装的,而且由于我交换了数据库,连接现在已经关闭,我们不再真正处于事务中了。

最直接的解决办法是什么?

编辑:

添加这看起来是最直接的:

代码语言:javascript
复制
  def setup                                                                     
    @controller = DashboardController.new                                       
    @use_transactional_fixtures = false                                         
  end                                                                           
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 18:05:46

有一个名为establish_connection的类方法,它可以做任何您想做的事情。在使用ActiveRecord::Base.establish_connection运行特定测试时,只需连接到不同的db即可。

代码语言:javascript
复制
ActiveRecord::Base.establish_connection(
  :adapter  => "mysql",
  :host     => "localhost",
  :username => "myuser",
  :password => "mypass",
  :database => "somedatabase"
)

您可以使用database.yml文件中的数据库别名。会是这样的:

代码语言:javascript
复制
ActiveRecord::Base.establish_connection('development')

您可以将它直接编码到特定的测试文件中。

检查文档:connection/class

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34639020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档