Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
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...
commit 84eac5dab8b0fe9ee20b51250e52ad7bfea36553 1 parent 876fd5a
@senny senny authored
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
Please sign in to comment.
Something went wrong with that request. Please try again.