# Failure Detail: introspect asserts

This plugin provides assert introspection. When the plugin is enabled and a test failure occurs, the traceback is displayed with extra context around the line in which the exception was raised. Simple variable substitution is also performed in the context output to provide more debugging information.

## Options

`-d````,` `--detailed-errors````,` `--failure-detail```

  Add detail to error output by attempting to evaluate failed asserts [NOSE_DETAILED_ERRORS]

## Plugin

class `nose.plugins.failuredetail.``FailureDetail`

  Bases: `nose.plugins.base.Plugin`

  Plugin that provides extra information in tracebacks of test failures.

  `configure`(options, conf)

    Configure plugin.

  `formatFailure`(test, err)

    Add detail from traceback inspection to error message of a failure.

  `options`(parser, env)

    Register commmandline options.

## Source

    """
    This plugin provides assert introspection. When the plugin is enabled
    and a test failure occurs, the traceback is displayed with extra context
    around the line in which the exception was raised. Simple variable
    substitution is also performed in the context output to provide more
    debugging information.
    """

    from nose.plugins import Plugin
    from nose.pyversion import exc_to_unicode, force_unicode
    from nose.inspector import inspect_traceback

    class FailureDetail(Plugin):
        """
        Plugin that provides extra information in tracebacks of test failures.
        """
        score = 1600 # before capture

        def options(self, parser, env):
            """Register commmandline options.
            """
            parser.add_option(
                "-d", "--detailed-errors", "--failure-detail",
                action="store_true",
                default=env.get('NOSE_DETAILED_ERRORS'),
                dest="detailedErrors", help="Add detail to error"
                " output by attempting to evaluate failed"
                " asserts [NOSE_DETAILED_ERRORS]")

        def configure(self, options, conf):
            """Configure plugin.
            """
            if not self.can_configure:
                return
            self.enabled = options.detailedErrors
            self.conf = conf

        def formatFailure(self, test, err):
            """Add detail from traceback inspection to error message of a failure.
            """
            ec, ev, tb = err
            tbinfo, str_ev = None, exc_to_unicode(ev)

            if tb:
                tbinfo = force_unicode(inspect_traceback(tb))
                str_ev = '\n'.join([str_ev, tbinfo])
            test.tbinfo = tbinfo
            return (ec, str_ev, tb)