【问题标题】:Running Rails unit tests on Heroku在 Heroku 上运行 Rails 单元测试
【发布时间】:2013-11-17 16:19:40
【问题描述】:

我已经为 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 好的,谢谢。我有一个类似的answer from @eden on Twitter
    • 事实证明,如果您没有在本地的 database.yml 中配置测试数据库,这也是错误。谢谢,你解决了我不相关的问题!
    【解决方案2】:

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

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

    您的 Heroku 应用程序:

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

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

    【讨论】:

      【解决方案3】:

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

      所以在 Heroku 上进行测试是可能的并且通常是可以的,但不能使用单元测试。

      【讨论】:

        【解决方案4】:

        Heroku 没有测试套件,您确实应该在部署到 Heroku 之前在开发方面进行测试。

        【讨论】:

        • 谢谢 - 我正在本地测试,但我认为在 Heroku 上也值得测试。猜不到!
        • 是的,一般来说,我从来没有在生产环境中进行过测试。它归结为编写或更确切地说是编写测试。我使用 rspec 和自动测试。自动测试很棒,因为它会在后台不断运行您的测试。您可以在Rails Tutorial - Testing 了解更多信息
        • 当然您想针对您的登台应用运行自动化测试。不这样做将完全是浪费。如果您不打算针对它运行测试,那么拥有一个 staging 应用程序的目的是什么?所以你可以运行手动测试?呃……好吧,那你为什么要费尽心思让它们自动化呢?这对我来说没有任何意义。
        • 所以这个问题的答案是你不能在 heroku 登台环境上运行自动化测试?这看起来确实是一种巨大的浪费。
        猜你喜欢
        • 2013-07-06
        • 2011-04-10
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 2012-11-22
        • 1970-01-01
        相关资源
        最近更新 更多