简体   繁体   中英

Can I use rack-test for deployment tests?

I've built a simple api in Sinatra , with the purpose of setting up a deployment pipeline using Docker . I'm at a stage where I could easily switch Sinatra for something else and there's currently one reason why I might do so.

I once wrote an api using Express and it was trivial to reuse the tests to test a deployment:

# Testing the code
chai.request(app)
  .get('/')

# Testing a deployment
chai.request('http://localhost:8080')
  .get('/')

Examples from: https://github.com/chaijs/chai-http#integration-testing

Now I am wondering if I can accomplish the same with rack-test and Sinatra . Simply sending a URL, instead of the app, crashes. So is there an easy way to accomplish this? I suppose I could write a testing framework on top of rack-test , but I'm not sure it's worth it, even though I do prefer Ruby over Javascript and Sinatra over Express .

I realised that I should be able to write a rack app that forwards all requests to the environment I want to run deployment tests against. So I went to Google and found a gem that does just that: rack-proxy

Here's how to write a simple rack app that redirects requests to your server:

require 'rack/proxy'

class Foo < Rack::Proxy
  def rewrite_env(env)
    env["HTTP_HOST"] = "api.example.com"
    env
  end
end

Then I ran my tests against Foo.new they succeeded. I checked the logs of that environment and I can confirm that my tests were in fact running against that environment.

Foo may not be the best name for such a proxy and you may not want the host name hardcoded, but I'm sure you can figure out how to make this work in your project if you need it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM