The project is in a healthy, maintained state
Simple HTTP server launcher for Rack application (Sinatra, Rails, etc...)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

>= 0
>= 0
 Project Readme

Gem Version

Rack::TestServer

Just launch HTTP server for testing your Rack application.

require 'rack/test_server'

# Configuration with `rackup` compatible options.
server = Rack::TestServer.new(
           app: Rails.application,
           server: :puma,
           Host: '127.0.0.1',
           Port: 3000)

before(:suite) do
  # Just launch it on a Thread
  server.start_async
  server.wait_for_ready
end

Background

"System testing", introduced in Rails 5.1, consists of two remarkable features: Sharing a DB connection and Capybara integration.

Since transactional fixtures are available by sharing a DB connection, we can see any mocked situation (ex. logged in as admin, receiving a lot of notifications, ...) from real browsers, which dramatically improved the testing experiences. Only one limitations for using this feature is that we have to launch the HTTP server within the same process as test runnner's.

This library is designed just for launching Rack application in a Thread. We can simply use Selenium, Playwright or other browser automation libraries in system testing, without studying any DSL :)

Installation

gem 'rack-test_server'

and then bundle install.

NOTE: Ruby 2.3 users can use 0.1.5. (without rackup gem), however it is no longer supported.

Usage

If you are working with Rails application, add configuration like below in spec/support/system_testing_helper.rb:

require 'rack/test_server'

# Configure Rack server
#
# options for Rack::Server
# @see https://github.com/rack/rack/blob/2.2.3/lib/rack/server.rb#L173
# options for Rack::Handler::Puma
# @see https://github.com/puma/puma/blob/v5.4.0/lib/rack/handler/puma.rb#L84
server = Rack::TestServer.new(
           app: Rails.application,
           server: :puma,
           Host: '127.0.0.1',
           Port: 3000)

RSpec.configure do
  # Launch Rails application.
  config.before(:suite) do
    server.start_async
    server.wait_for_ready
  end
end

If you are not Rails user, just replace Rails.application with your Rack application, and put the configuration file as you prefer. :)

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Rack::TestServer project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.