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

问题描述:

我已经在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超过JavascriptSinatra超过Express

我意识到,我应该能够编写一个机架的应用程序,转发到我要对运行部署测试环境中的所有请求。所以我去了谷歌和发现的宝石,做到了这一点: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可能不是这样一个代理的最好名称,你可能不希望主机名被硬编码,但我相信你可以找出如何在你的项目中做这个工作,如果你需要的话。