我在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
。
答案 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
可能不是这种代理的最佳名称,您可能不希望硬编码主机名,但我相信如果您需要,可以弄清楚如何在项目中使用它。