0

我在 中构建了一个简单的 api Sinatra,目的是使用Docker. 我正处于一个可以轻松切换Sinatra到其他东西的阶段,目前我可能会这样做是有一个原因的。

我曾经写过一个 api 使用Express并且重用测试来测试部署是微不足道的:

# 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-testand完成相同的操作Sinatra。只需发送一个 URL,而不是应用程序,就会崩溃。那么有没有一种简单的方法可以做到这一点?我想我可以在 .js 之上编写一个测试框架rack-test,但我不确定它是否值得,尽管我确实更喜欢Ruby一遍JavascriptSinatra一遍Express.

4

1 回答 1

2

我意识到我应该能够编写一个机架应用程序,将所有请求转发到我想要运行部署测试的环境。所以我去了谷歌,找到了一个可以做到这一点的宝石: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可能不是此类代理的最佳名称,并且您可能不希望对主机名进行硬编码,但我相信您可以在需要时弄清楚如何在您的项目中使用它。

于 2017-02-28T14:57:05.903 回答