Browse files

BACKTRACE environment variable to show unfiltered backtraces.

We used to support the `BACKTRACE` environment variable but when
we switched to MiniTest it got removed: f9382cd

This commit adds back the functionality to show the unfiltered backtrace when needed.
This also works when you run your tests with `rake`:

* `BACKTRACE=1 bin/rake test`
* `BACKTRACE=1 ruby -Itest ...`
  • Loading branch information...
1 parent 876fd5a commit 84eac5dab8b0fe9ee20b51250e52ad7bfea36553 @senny senny committed Oct 28, 2013
Showing with 48 additions and 6 deletions.
  1. +11 −0 railties/CHANGELOG.md
  2. +3 −1 railties/lib/rails/test_help.rb
  3. +34 −5 railties/test/application/test_test.rb
View
11 railties/CHANGELOG.md
@@ -1,3 +1,14 @@
+* `BACKTRACE` environment variable to show unfiltered backtraces for
+ test failures.
+
+ Example:
+
+ `BACKTRACE=1 ruby -Itest ...`
+ # or with rake
+ `BAKCTRACE=1 bin/rake`
+
+ *Yves Senn*
+
* Removal of all javascript stuff (gems and files) when generating a new
application using the `--skip-javascript` option.
View
4 railties/lib/rails/test_help.rb
@@ -10,7 +10,9 @@
# Config Rails backtrace in tests.
require 'rails/backtrace_cleaner'
-MiniTest.backtrace_filter = Rails.backtrace_cleaner
+if ENV["BACKTRACE"].nil?
+ MiniTest.backtrace_filter = Rails.backtrace_cleaner
+end
if defined?(ActiveRecord::Base)
class ActiveSupport::TestCase
View
39 railties/test/application/test_test.rb
@@ -24,7 +24,7 @@ def test_truth
end
RUBY
- run_test_file 'unit/foo_test.rb'
+ assert_successful_test_run 'unit/foo_test.rb'
end
test "integration test" do
@@ -49,19 +49,48 @@ def test_index
end
RUBY
- run_test_file 'integration/posts_test.rb'
+ assert_successful_test_run 'integration/posts_test.rb'
+ end
+
+ test "enable full backtraces on test failures" do
+ app_file 'test/unit/failing_test.rb', <<-RUBY
+ require 'test_helper'
+
+ class FailingTest < ActiveSupport::TestCase
+ def test_failure
+ raise "fail"
+ end
+ end
+ RUBY
+
+ output = run_test_file('unit/failing_test.rb', env: { "BACKTRACE" => "1" })
+ assert_match %r{/app/test/unit/failing_test\.rb}, output
end
private
- def run_test_file(name)
- result = ruby '-Itest', "#{app_path}/test/#{name}"
+ def assert_successful_test_run(name)
+ result = run_test_file(name)
assert_equal 0, $?.to_i, result
end
+ def run_test_file(name, options = {})
+ ruby '-Itest', "#{app_path}/test/#{name}", options
+ end
+
def ruby(*args)
+ options = args.extract_options!
+ env = options.fetch(:env, {})
+ env["RUBYLIB"] = $:.join(':')
+
Dir.chdir(app_path) do
- `RUBYLIB='#{$:.join(':')}' #{Gem.ruby} #{args.join(' ')}`
+ `#{env_string(env)} #{Gem.ruby} #{args.join(' ')}`
end
end
+
+ def env_string(variables)
+ variables.map do |key, value|
+ "#{key}='#{value}'"
+ end.join " "
+ end
end
end

0 comments on commit 84eac5d

Please sign in to comment.