由于直接在 Heroku 上运行测试似乎不是那么简单,我求助于将本地测试定向到 Heroku 应用程序,使用 HTTParty 调用而不是通常的 Capybara 调用。
这可以很好地工作,至少对于集成测试而言。
例如,这是我在针对本地应用运行常规本地测试时在步骤定义中使用的方法:
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 World 中,基于传递给 Cucumber 本身的特定选项并设置在相关配置文件中(这样当我想针对 Heroku 进行测试时,我可以简单地调用 cucumber -p 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