Ruby on rails 使用特定的RAILS_ENV进行单个单元测试

Ruby on rails 使用特定的RAILS_ENV进行单个单元测试,ruby-on-rails,ruby,ruby-on-rails-3,unit-testing,testing,Ruby On Rails,Ruby,Ruby On Rails 3,Unit Testing,Testing,我想写一个具体的测试来检查回归。我继承了一个没有单元测试的Rails环境,很少有人通过外部(Rails之外)的方式来防范将什么放入数据库 单元测试将迭代数据库中的特定模型并呈现一个视图,确保每个实例仍然可以在该视图中正确呈现。我想在开发数据库实例上运行它,该实例通常是生产数据库(mysql)的克隆 数据太大,无法放入设备中。。。我想使用'test'sqlite数据库保留其余的测试 那么,有没有一种方法可以覆盖Rails连接到哪个数据库的单个测试 我使用的是Rails 3.2.22 编辑: 基于,

我想写一个具体的测试来检查回归。我继承了一个没有单元测试的Rails环境,很少有人通过外部(Rails之外)的方式来防范将什么放入数据库

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

数据太大,无法放入设备中。。。我想使用'test'sqlite数据库保留其余的测试

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

我使用的是Rails 3.2.22

编辑:

基于,我使用:

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      

有一个名为
build\u connection
的类方法,它可以执行您想要的操作。只需在运行特定测试时使用
ActiveRecord::Base连接到另一个db。建立连接

ActiveRecord::Base.establish_connection(
  :adapter  => "mysql",
  :host     => "localhost",
  :username => "myuser",
  :password => "mypass",
  :database => "somedatabase"
)
您可以使用
database.yml
文件中的数据库别名。应该是这样的:

ActiveRecord::Base.establish_connection('development')
您可以将其直接编码到特定的测试文件中


检查文档:

是否使用Minitest?Rspec?还有别的吗?我假设您希望此测试始终使用此特定环境,而不只是在命令行上一次性执行RAILS_ENV=[x]?我希望此特定测试始终使用特定环境,而不管RAILS_ENV设置为什么。。。实际上,我的test\u helper.rb已经设置了
ENV[“RAILS\u ENV”]=“test”
set,所以我相信RAILS\u ENV不能在命令行上被重写?(我同意。)我的GEM文件中似乎有rspec 2.14.1,但我认为我使用的是minitest——测试类是从test::Unit::TestCase、ActiveSupport::TestCase、ActionView::TestCase、ActionController::TestCase派生的,真的吗?这就是全部?我已经找了好几天了!非常感谢你!与您的回答同时,我还发现,这表明也将确保回退到默认设置。我认为这是必要的?我得到了一个回滚错误,但我认为这可能是因为我是从ActionController::TestCase派生的。Test::Unit::TestCase工作正常。不过,为了模拟页面呈现,我可能需要一个其他的测试类?我更喜欢规范而不是测试!抱歉,我无法回答。我已经接受了这个答案,但请注意,我在问题中添加了一些变通方法,用于处理rails测试框架围绕测试进行的事务。
ActiveRecord::Base.establish_connection('development')