Get 'backtrace' of an assertion error in ruby unit testing
minitest, ruby, unit-testing
Solution
I've analyzed this matter further and stumbled across minitest's method Assertion.location. There, it goes through the backtrace (failed assertions result in exceptions of type `Minitest::Assertion < Exception`), reverses it and looks for methods starting with one of the following keywords:
- `assert`
- `refute`
- `flunk`
- `pass`
- `fail`
- `raise`
- `must`
- `wont`
Therefore, the example in the original question should look like the following:
# Just an example method.
def assert_my_equal(a, b)
assert_equal a, b # Error indicates this line
end
assert_my_equal(1, 2) # This is the line number indicated in the failure report
assert_my_equal(2, 3)
This also explains why the Rails-specific assertion methods behave correctly: They start with `assert_`.
Problem
When creating a helper method for unit testing, the console output of the failure only indicates the line where the actual assertion happened. ``` # Just an example method. def test_equal(a, b) assert_equal a, b # Error indicates this line end test_equal(1, 2) # I'd like to know this line test_equal(2, 3) ``` Is there a way of showing something like a "backtrace" or provide more context for these assertion errors?