Skip to content

Commit

Permalink
BACKTRACE environment variable to show unfiltered backtraces.
Browse files Browse the repository at this point in the history
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
senny committed Nov 4, 2013
1 parent 876fd5a commit 84eac5d
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 6 deletions.
11 changes: 11 additions & 0 deletions 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.

Expand Down
4 changes: 3 additions & 1 deletion railties/lib/rails/test_help.rb
Expand Up @@ -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
Expand Down
39 changes: 34 additions & 5 deletions railties/test/application/test_test.rb
Expand Up @@ -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
Expand All @@ -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.