How to show longer traces in Rails TestCases

前端 未结 4 2321
走了就别回头了
走了就别回头了 2021-02-15 17:19

Is there a config variable to set, or some other way to get Rails ActiveSupport::TestCase to show more than one trace line? It is really hard to de

相关标签:
4条回答
  • 2021-02-15 17:56

    You could try setting global variable $DEBUG to non-nil value. If that's minitest who filters your backtrace, setting $DEBUG = true would ensure that the entire backtrace is printed out.

    0 讨论(0)
  • 2021-02-15 18:00

    See whether you haven't a file config/initializers/backtrace_silencers.rb

    It says:

    # You can also remove all the silencers if you're trying to debug
    # a problem that might stem from framework code.
    Rails.backtrace_cleaner.remove_silencers!
    

    You can also call remove_filters! if the first was not enough, but filters only make the paths shorter, while silencers do remove some lines from the backtrace.

    You may find the source code in railties/lib/rails/backtrace_cleaner.rb and activesupport/lib/active_support/backtrace_cleaner.rb useful.

    0 讨论(0)
  • 2021-02-15 18:07

    You can customize Minitest stack traces like this for example:

    class MyBacktraceFilter
      def filter bt
        bt.dup.reject{|x| not x.to_s =~ /#{::Rails.root.to_s}/}
      end
    end
    MiniTest.backtrace_filter = MyBacktraceFilter.new
    

    The filter method accepts the full stack trace in the bt parameter as an array and returns the filtered array. If you want the entire stack to show simply pass the input:

    class MyBacktraceFilter
      def filter bt
        bt
      end
    end
    MiniTest.backtrace_filter = MyBacktraceFilter.new
    
    0 讨论(0)
  • 2021-02-15 18:17

    You could try to wrap failing code with:

    begin
      # failing code
    rescue Exception => e
      puts e.message
      puts e.backtrace
    end
    

    Another way is debugging your application with ruby-debug.

    0 讨论(0)
提交回复
热议问题