我可以使用 rack-test 进行部署测试吗?
Can I use rack-test for deployment tests?
我在 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
.
我意识到我应该能够编写一个机架应用程序,将所有请求转发到我想要 运行 部署测试的环境。所以我去了 Google 并找到了一个 gem 可以做到这一点:rack-proxy
以下是编写将请求重定向到您的服务器的简单机架应用程序的方法:
require 'rack/proxy'
class Foo < Rack::Proxy
def rewrite_env(env)
env["HTTP_HOST"] = "api.example.com"
env
end
end
然后我 运行 我的测试 Foo.new
他们成功了。我检查了那个环境的日志,我可以确认我的测试实际上是针对那个环境 运行ning 的。
Foo
可能不是此类代理的最佳名称,您可能不希望对主机名进行硬编码,但我相信如果需要,您可以弄清楚如何在您的项目中实现此功能它。
我在 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
.
我意识到我应该能够编写一个机架应用程序,将所有请求转发到我想要 运行 部署测试的环境。所以我去了 Google 并找到了一个 gem 可以做到这一点:rack-proxy
以下是编写将请求重定向到您的服务器的简单机架应用程序的方法:
require 'rack/proxy'
class Foo < Rack::Proxy
def rewrite_env(env)
env["HTTP_HOST"] = "api.example.com"
env
end
end
然后我 运行 我的测试 Foo.new
他们成功了。我检查了那个环境的日志,我可以确认我的测试实际上是针对那个环境 运行ning 的。
Foo
可能不是此类代理的最佳名称,您可能不希望对主机名进行硬编码,但我相信如果需要,您可以弄清楚如何在您的项目中实现此功能它。