Rails makes it easy enough to write test code or RSpec that runs within Rails. However, what’s much, much harder
is testing code (like a RubyGem) that augments Rails itself, particularly if you want that code to be compatible
with multiple versions of Rails. Often people will simply check in a full Rails tree (i.e., that which is generated
by rails new
), but that fixes you to an exact version of Rails and is difficult to upgrade or manipulate.
OopRailsServer
provides a completely different, much cleaner solution: it provides an object,
OopRailsServer::RailsServer
. This object knows how to:
- Install any version of Rails from scratch, completely cleanly (i.e., the equivalent of
gem install rails -v=4.2.0
); - Use that version of Rails to create a new Rails installation (i.e.,
rails _4.2.0_ new
); - Add any lines you want to the resulting Rails Gemfile, and run
bundle install
(so that any gems you want — for example, the gem you’re testing — are available to that Rails installation); - Populate that installation by using one or more "template directories" that you provide — each template directory is laid out exactly like a standard Rails tree (but need contain only files you actually want to provide), and will overwrite the corresponding files in the Rails tree
- Spin up a new Rails server, running on a randomly-assigned port, in that Rails installation;
- Fetch arbitrary URLs from that Rails server on your command;
- When it’s all done, safely (and reliably) terminate that server.
As of this writing, this gem is not fully productized: while it works reliably, there is insufficient documentation
to easily use it yourself. It is, however, very reliable: it is used as the backbone of the test suites for
fortitude
, parcels
, and the
backbone of the real work in rails_view_benchmarks
.
Add this line to your application's Gemfile:
gem 'oop_rails_server'
And then execute:
$ bundle
Or install it yourself as:
$ gem install oop_rails_server
TODO: Write usage instructions here
- Fork it ( https://github.com/[my-github-username]/oop_rails_server/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request