我可以使用机架测试进行部署测试吗?
问题描述:
我已经在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-test
和Sinatra
。只需发送一个URL而不是应用程序就会崩溃。那么有没有简单的方法来完成这个?我想我可以写在上面rack-test
测试框架,但我不知道它是值得的,即使我做喜欢Ruby
超过Javascript
和Sinatra
超过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
可能不是这样一个代理的最好名称,你可能不希望主机名被硬编码,但我相信你可以找出如何在你的项目中做这个工作,如果你需要的话。