Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Heroku上运行Rails单元测试_Ruby On Rails_Ruby On Rails 3_Heroku - Fatal编程技术网

Ruby on rails 在Heroku上运行Rails单元测试

Ruby on rails 在Heroku上运行Rails单元测试,ruby-on-rails,ruby-on-rails-3,heroku,Ruby On Rails,Ruby On Rails 3,Heroku,我在Heroku上部署了一个应用程序,一切正常。问题是我不能远程运行我的单元测试。我试过: heroku rake test:units 及 但对于这两种情况,我都得到了大量的堆栈跟踪,最后是: 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/database

我在Heroku上部署了一个应用程序,一切正常。问题是我不能远程运行我的单元测试。我试过:

heroku rake test:units

但对于这两种情况,我都得到了大量的堆栈跟踪,最后是:

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'
rake中止!
nil:NilClass的未定义方法“[]”
/app/[id]/home/.bundle/gems/ruby/1.9.1/gems/activerecord-3.0.3/lib/active\u record/railties/databases.rake:429:in`block(3层)in'
/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'
我正在运行
bambon-mri-1.9.2
堆栈


到目前为止,我得到的最接近答案是。

Heroku没有提供测试数据库,因此没有直接的方法来实现这一点。理论上,您可以创建一个新的heroku实例,并对rake任务进行黑客攻击,以便尽可能只使用“生产”数据库,但我怀疑所需的努力是否值得。heroku没有测试套件,在部署到heroku之前,您真的应该在开发端进行测试。

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


因此,在Heroku上进行测试是可能的,也是常见的,但不能使用单元测试

Heroku devcenter在此处解释了如何管理登台环境:

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

您的Heroku应用程序:

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

您可以使用登台环境来测试所有这些,但我们可以说,对于每个单元测试,都是这样,所以我认为如果我们可以在Heroku上运行单元测试,那就太好了。

好的,谢谢。我也有一个类似的错误。如果您没有在database.yml本地配置测试数据库,那么这也是一个错误。谢谢,你解决了我无关的问题!谢谢-我正在本地测试,但我认为它也值得在Heroku上测试。我想不会吧!是的,一般来说,我从未在生产中进行过测试。它归结为写作,或者更确切地说是过度写作测试。我使用rspec和自动测试。自动测试非常好,因为它可以在后台不断运行测试。当然,如果您想对登台应用程序运行自动测试,您可以在中了解更多信息。不这样做完全是浪费。如果你不打算对登台应用程序运行测试,那么使用登台应用程序的目的是什么?这样你就可以运行手动测试了?UH那你为什么要费尽心机把它们自动化呢?这对我来说毫无意义。所以答案是你不能在heroku登台环境上运行自动测试?这看起来确实是一个巨大的浪费。
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'