在heroku上运行黄瓜测试

时间:2010-09-10 22:39:43

标签: ruby-on-rails testing deployment cucumber heroku

我正在考虑在我的rails应用程序上运行我的黄瓜测试。这是检查开发环境和部署环境之间差异的理智方式吗?

有没有人有这种情况的经验? Rake -T告诉我“黄瓜耙任务不可用(黄瓜没有安装)”,即使我已经在我的.gems文件中指定了cucumber-rails。我是从错误的角度接近这个吗?

有任何想法或建议吗?

4 个答案:

答案 0 :(得分:3)

您可以使用单独的Heroku实例并将您的应用部署到那里。然后,您应该可以通过heroku rake运行测试。

您可以在heroku命令行中使用--app参数来选择运行命令的实例。只是不要意外删除你的prod数据库。

答案 1 :(得分:1)

这需要创建,修改和随后删除测试数据库,并且由于Heroku忽略了database.yml文件,因此根本不可能。

您可以尝试在测试环境中运行应用程序,方法是在控制台中进行设置,然后您就可以运行测试

heroku config:add RACK_ENV=test

但即使你让它工作,也要跟你的生产数据库说再见,因为我很确定Heroku会再次覆盖database.yml并使用它自动分配给你的应用程序的数据库。

您也可以考虑创建second app on Heroku仅用于测试。

答案 2 :(得分:0)

你的Gem清单中是否还有cucumber宝石?

答案 3 :(得分:0)

由于直接在Heroku上运行测试似乎并不是那么简单,我使用HTTParty调用而不是通常的Capybara调用将本地测试引导到Heroku应用程序。

这可以很好地工作,至少对于集成测试。

例如,这是我在针对本地应用程序运行常规本地测试时在步骤定义中使用的方法:

  def my_http_request(httpmethod, path, body = '')
    send httpmethod, path, body
  end

这是我在针对Heroku app运行本地测试时使用的方法:

  def my_http_request(httpmethod, path, body = '')
    options = body.blank? ? { :headers => {"Content-Length" => "0"} } : { :body => body }
    @last_response = HTTParty.send httpmethod, 'https://lit-*****-6305.herokuapp.com' + path, options
  end

我将一个或另一个加载到Cucumber World中,基于传递给Cucumber本身的特定选项并设置在相关的配置文件中(这样当我想对Heroku进行测试时,我可以简单地调用cucumber -p heroku)。

当然,在第二种情况下,我还必须在每个场景之前注意初始化Heroku数据库,在'before'钩子中调用类似的东西:

  def start_my_heroku_tests
    @@db = PGconn.open(:host => 'ec2-54-**-****-44.compute-1.amazonaws.com', :port => 5432, :dbname => 'd4d********rmi4k', :user => 'llcm*******jcyh', :password => '7FN_************gcxq')
    @@db.exec "TRUNCATE sources"
    @@db.exec "TRUNCATE posts"
  end