Class: Sinatra::Runner
Relationships & Source Files | |
Inherits: | Object |
Defined in: | sinatra-contrib/lib/sinatra/runner.rb |
Overview
NOTE: This feature is experimental, and missing tests!
Helps you spinning up and shutting down your own sinatra app. This is especially helpful for running real network tests against a sinatra backend.
The backend server could look like the following (in test/server.rb).
require "sinatra"
get "/" do "Cheers from test server" end
get "/ping" do "1" end
Note that you need to implement a ping action for internal use.
Next, you need to write your runner.
require 'sinatra/runner'
class Runner < Sinatra::Runner def app_file File.expand_path("server.rb", dir) end end
Override Runner#app_file, #command, #port, #protocol and #ping_path for customization.
Don't forget to override #app_file specific to your application!
Wherever you need this test backend, here's how you manage it. The following example assumes you have a test in your app that needs to be run against your test backend.
runner = ServerRunner.new runner.run
# ..tests against localhost:4567 here..
runner.kill
For an example, check https://github.com/apotonick/roar/blob/master/test/integration/runner.rb
Instance Attribute Summary
- #alive? ⇒ Boolean readonly private
- #pipe rw private
Instance Method Summary
- #app_file
- #get(url)
- #get_response(url)
- #get_stream(url = '/stream', &block)
- #kill
- #log
- #run
-
#command
private
to be overwritten.
- #get_https_url(uri) private
- #get_url(url) private
- #ping(timeout = 30) private
-
#ping_path
private
to be overwritten.
-
#port
private
to be overwritten.
- #protocol private
- #start private
Instance Attribute Details
#alive? ⇒ Boolean
(readonly, private)
[ GitHub ]
#pipe (rw, private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/runner.rb', line 103
attr_accessor :pipe
Instance Method Details
#app_file
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/runner.rb', line 53
def app_file File. ('server.rb', __dir__) end
#command (private)
to be overwritten
#get(url)
[ GitHub ]#get_https_url(uri) (private)
[ GitHub ]#get_response(url)
[ GitHub ]#get_stream(url = '/stream', &block)
[ GitHub ]#get_url(url) (private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/runner.rb', line 148
def get_url(url) uri = URI.parse(url) return uri.read unless protocol == 'https' get_https_url(uri) end
#kill
[ GitHub ]#log
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/runner.rb', line 94
def log @log ||= +'' loop { @log << pipe.read_nonblock(1) } rescue Exception @log end
#ping(timeout = 30) (private)
[ GitHub ]#ping_path (private)
to be overwritten
# File 'sinatra-contrib/lib/sinatra/runner.rb', line 135
def ping_path '/ping' end
#port (private)
to be overwritten
# File 'sinatra-contrib/lib/sinatra/runner.rb', line 140
def port 4567 end
#protocol (private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/runner.rb', line 144
def protocol 'http' end
#run
[ GitHub ]#start (private)
[ GitHub ]# File 'sinatra-contrib/lib/sinatra/runner.rb', line 105
def start IO.popen(command) end