2010-09-10 156 views
7

我正在考虑在heroku上运行我的rails应用程序时运行我的黄瓜测试。这是否是一种检查开发环境与部署环境之间差异的有效方法?在heroku上运行黄瓜测试

有没有人有这种情况的经验?耙 - T告诉我“黄瓜耙任务不可用(黄瓜未安装)”,即使我已经在我的.gems文件中指定黄瓜铁轨。我是否从错误的角度来处理这个问题?

任何想法或建议吗?

回答

0

cucumber宝石是否也在您的宝石清单中?

1

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

您可以尝试通过在控制台设置它运行在测试环境的应用程序,然后你可以运行测试

heroku config:add RACK_ENV=test 

但即使你得到这个工作,说再见你生产数据库,因为我非常确定Heroku会再次覆盖database.yml并使用它自动分配给你的应用程序的数据库。

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

3

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

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

0

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

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

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

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

,这是靠在Heroku的应用程序正在运行的本地测试时我使用的方法:

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 -p heroku,当我想测试对Heroku的)特定的选项。

当然,在第二种情况下我也有照顾初始化每个方案之前,Heroku的数据库,在“前”挂钩,要求例如是这样的:

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