Since as of commit 2748b75087, we no
longer install dependencies inside of the Rails app that is generated
and used to run all of the tests, we have to require all of the
dependencies that the app would install inside of the appropriate
Appraisals.
This was mostly straightforward except for some workarounds with the
turn gem:
* Rails 3.1 requires two versions of turn depending on which Ruby
version you're using. On 1.9.2, it uses turn 0.9.2; after 1.9.2, it
uses ~> 0.9.3. To accommodate this we have to have two versions of the
Rails 3.1 appraisal which declare the different turn versions.
* Rails 3.1 also loads the turn gem even if, in the Gemfile for the app,
turn is declared with `require: false`. This causes a problem while
running our tests because turn actually requires minitest/autorun,
which adds a hook so when Ruby exits, Minitest tests are run. Because
we're already using RSpec, Minitest will try to re-run the `rspec`
command we ran within a Minitest environment. This will fail since we
are using RSpec-specific command line options to run the tests.
Unfortunately there's no way to shut off minitest/autorun after it's
been required, so we have to monkey-patch Minitest's #run method so
it's a no-op.
The warning message was:
[deprecated] I18n.enforce_available_locales will default to true in
the future. If you really want to skip validation of your locale you
can set I18n.enforce_available_locales = false to avoid this message.
The code that sets up the blank Rails application we use for testing is
a little messy. Let's use an object to encapsulate this and then refer
to this object every time we access Rails.application.
`bundle install` doesn't always work -- sometimes it runs into errors
making HTTP requests, for whatever reason. This will cause Travis to
fail which is pretty annoying.
* Travis supplies an executable called `travis_retry` which will
automatically retry the command up to 3 times before really failing.
Tell Travis to use this when it runs `bundle install` before it
runs tests.
* In spec_helper, we create a Rails app and use this within the
test suite. This will also run `bundle install`. Unfortunately we
can't use `travis_retry` for this as it's a function and is not
available to us in Ruby-land, so use our own retry logic.