When running tests, you can now switch between running them against a SQLite or PostgreSQL database. This is accomplished by modifying the unit and acceptance tests so that when they generate and load the test Rails application, database.yml is replaced with content that will configure the database appropriately.
* Change 'spec' Rake task to 'spec:unit' * Require unit_spec_helper.rb in unit tests, not spec_helper.rb * Re-namespace files in spec/support/unit under UnitTests * Files in spec/support/unit/helpers no longer automatically add themselves to RSpec - this happens in unit_spec_helper.rb * Extract RecordWithDifferentErrorAttributeBuilder and RecordValidatingConfirmationBuilder to separate files
Given this scenario: * Using Rails 4.1 * Gemfile has `gem 'shoulda-matchers', require: false` * spec_helper has `require 'shoulda/matchers'` following `require 'rspec/rails'` * Using Spring to run tests matchers that delegate to assertions in Rails (e.g. `render_template` and `route`) will fail in the wrong way if used. They fail because in order to use these assertions, we expect that the assertions will raise a specific exception, an exception that corresponds to whichever test framework that Rails is using. For Rails versions that used Test::Unit, this is Test::Unit::AssertionFailedError. For current Rails versions, which now use Minitest, this exception is Minitest::Assertion. The problem is that instead of asking Rails which exception class it's using, we are trying to detect this exception class ourselves (for cases in which Rails is not being used). This leads to the wrong class being detected: when using a Rails version that uses Minitest, we choose Test::Unit::AssertionFailedError as the class. This happens using the exact scenario above because even though shoulda-matchers is loaded after rspec-rails, rspec-rails itself defines Test::Unit::AssertionFailedError. Also add Cucumber tests that confirms this exact scenario works.
Currently, `rake` does run the `appraise` task before running tests. If you run `rake appraise` on its own, it runs `rake appraise:install` beforehand. However, the way that `rake` runs `appraise` is by executing, not invoking, it. Hence, `appraisal:install` will actually not be run (as #execute does not run dependencies for the task being executed). This fix is mostly useful when running tests locally -- on Travis this isn't a problem b/c we are running `rake spec cucumber` instead of just `rake`.
…ith BUNDLE_GEMFILE set
…s version Note that we also bump RSpec to 2.6.1.beta1 because the incompatibility with Rails 3.1.0.rc1
…atchers/rspec in rails 2 and 3 using cucumber
…dated authors and other gem info; bumped to version 2.11