Find out what your Ruby gems are worth.
Appraisal integrates with bundler and rake to test your library against different versions of dependencies in repeatable scenarios called "appraisals." Appraisal is designed to make it easy to check for regressions in your library without interfering with day-to-day development using bundler.
In your Gemfile:
gem "appraisal"
Setting up appraisal requires an Appraisals file (similar to a Gemfile) in your project root, named "Appraisals" (note the case), and some slight changes to your project's Rakefile.
An Appraisals file consists of several appraisal definitions. An appraisal definition is simply a list of gem dependencies. For example, to test with a few versions of Rails:
appraise "rails2" do
gem "rails", "2.3.9"
end
appraise "rails3" do
gem "rails", "3.0.0"
end
The dependencies in your Appraisals file are combined with dependencies in your Gemfile, so you don't need to repeat anything that's the same for each appraisal. If something is specified in both the Gemfile and an appraisal, the version from the appraisal takes precedence.
Once you have an Appraisals file set up, just require appraisal in your Rakefile:
require 'appraisal'
It's also recommended that you setup bundler at the very top of your Rakefile, so that you don't need to constantly run bundle exec:
require 'rubygems'
require 'bundler/setup'
Once you've configured the appraisals you want to use, you need to install the dependencies for each appraisal:
rake appraisal:install
This will resolve, install, and lock the dependencies for that appraisal using bundler. Once you have your dependencies setup, you can run any rake task in a single appraisal:
rake appraisal:rails2 test
This will run your "test" rake task using the dependencies configured for Rails 2. You can also run each appraisal in turn:
rake appraisal test
If you want to use only the dependencies from your Gemfile, just run "rake test" as normal. This allows you to keep running with the latest versions of your dependencies in quick test runs, but keep running the tests in older versions to check for regressions.
Running "rake appraisal:install" generates a Gemfile for each appraisal by combining your root Gemfile with the specific requirements for each appraisal. These are stored in the "gemfiles" directory, and should be added to version control to ensure that the same versions are always used. When running rake tasks for an appraisal, the rake task is run with the appropriate Gemfile for that appraisal, ensuring the correct dependencies are used.
When using Appraisal, we recommend that you check your Gemfile.lock into version control, as well as the gemfiles directory generated by Appraisal. This will ensure that your tests are always green when you check out a fresh copy. It also allows you to create reproducible regression tests for version-specific bugs.
If you're using Appraisal and using Travis CI, we're recommending you to setup
Travis to run the test against multiple generated Gemfiles. This can be done
by using gemfile
setting:
# In .travis.yml
gemfile:
- gemfiles/3.0.gemfile
- gemfiles/3.1.gemfile
- gemfiles/3.2.gemfile
Please note that if you've set your default rake task to run the test against
all versions of its dependency, you might have to set a script
setting:
script: "bundle exec rake spec cucumber"
That will make sure that each of the test sub-job are not getting run more than one time.
Appraisal is maintained and funded by thoughtbot, inc
Thank you to all the contributors!
The names and logos for thoughtbot are trademarks of thoughtbot, inc.
Appraisal is Copyright © 2010-2013 Joe Ferris and thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.