我可以使用机架测试进行部署测试吗?

时间:2017-02-27 22:20:10

标签: ruby testing sinatra rack rack-test

我在Sinatra中构建了一个简单的api,目的是使用Docker设置部署管道。我正处于一个可以轻松切换Sinatra以获取其他内容的阶段,而且目前我可能会这样做。

我曾经使用Express编写了一个api,重用测试来测试部署是微不足道的:

# Testing the code
chai.request(app)
  .get('/')

# Testing a deployment
chai.request('http://localhost:8080')
  .get('/')

示例来自:https://github.com/chaijs/chai-http#integration-testing

现在我想知道我是否可以通过rack-testSinatra完成同样的工作。只是发送一个URL,而不是应用程序,崩溃。那么有一种简单的方法来实现这一目标吗?我想我可以在rack-test之上编写测试框架,但我不确定它是否值得,即使我更喜欢Ruby而不是Javascript Sinatra超过Express

1 个答案:

答案 0 :(得分:0)

我意识到我应该能够编写一个机架应用程序,将所有请求转发到我想要运行部署测试的环境。所以我去了Google,找到了一个可以做到这一点的宝石:rack-proxy

以下是如何编写一个简单的机架应用程序,将请求重定向到您的服务器:

require 'rack/proxy'

class Foo < Rack::Proxy
  def rewrite_env(env)
    env["HTTP_HOST"] = "api.example.com"
    env
  end
end

然后我对他们成功的Foo.new进行了测试。我检查了该环境的日志,我可以确认我的测试实际上是针对该环境运行的。

Foo可能不是这种代理的最佳名称,您可能不希望硬编码主机名,但我相信如果您需要,可以弄清楚如何在项目中使用它。