在Heroku上运行Rails单元测试

时间:2011-02-17 23:06:24

标签: ruby-on-rails ruby-on-rails-3 heroku

我已经向Heroku部署了一个应用程序,一切正常。问题是我无法远程运行我的单元测试。我试过了:

heroku rake test:units

heroku rake db:test:prepare

但是对于我来说,我得到了一个巨大的堆栈跟踪,结束于:

rake aborted!
undefined method `[]' for nil:NilClass
/app/[id]/home/.bundle/gems/ruby/1.9.1/gems/activerecord-3.0.3/lib/active_record/railties/databases.rake:429:in `block (3 levels) in <top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `call'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `each'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:629:in `execute'

我正在运行bamboo-mri-1.9.2堆栈。

到目前为止,我最接近答案的是this blog post from 2009

4 个答案:

答案 0 :(得分:7)

Heroku不提供测试数据库,因此没有直接的方法可以做到这一点。理论上你可以创建一个新的heroku实例并且可以将rake任务破解为仅仅使用'production'数据库,但是我怀疑所需的努力是值得的。

答案 1 :(得分:6)

Heroku devcenter提供了有关如何管理暂存环境的说明:http://devcenter.heroku.com/articles/multiple-environments

我不知道是否可以运行单元测试,但我完全理解你为什么要这样做。

你的Heroku申请:

  • 可能与本地系统有不同的宝石(据我所知,如果你在Windows下开发,你的Gemfile.lock会被忽略)
  • 可能有不同的操作系统(某些Ruby库,因为IO在Windows和Linux上的行为方式不同)
  • 可能有不同的ruby版本
  • 可能有一个不同的数据库系统(使用与您在Heroku上使用的配置完全相同的本地数据库似乎并不那么容易)
  • 更一般地说,将在不同的系统上运行(Linux版本,ImageMagick等)

您可以使用暂存环境测试所有这些,但我们可以说每个单元测试,所以我认为如果我们可以在Heroku上运行单元测试会很棒。

答案 2 :(得分:5)

正常的方法是在本地进行测试,然后部署到隐藏的Heroku实例(“staging”)。然后,您可以使用Beta测试人员测试该隐藏的临时应用程序,对其运行压力测试等等。如果您对此感到满意,请将您的应用程序部署到“生产”Heroku实例。

因此,对Heroku进行测试是可能的,也可以是常规,但不能进行单元测试。

答案 3 :(得分:2)

Heroku没有测试套件,在部署到heroku之前,你真的应该在开发方面进行测试。