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 Rackup::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.