BACKTRACE environment variable to show unfiltered backtraces.

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

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 ...`
This commit is contained in:
Yves Senn 2013-10-28 13:44:17 +01:00
parent 876fd5a5d4
commit 84eac5dab8
3 changed files with 48 additions and 6 deletions

View File

@ -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 File

@ -10,7 +10,9 @@ require 'rails/generators/test_case'
# 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 File

@ -24,7 +24,7 @@ module ApplicationTests
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 @@ module ApplicationTests
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