Skip to content

testthat 2.3.0

Compare
Choose a tag to compare
@hadley hadley released this 06 Nov 15:30
· 493 commits to master since this release

Conditions

This release mostly focusses on an overhaul of how testthat works with conditions (i.e. errors, warnings and messages). There are relatively few user-facing changes, although you should now see more informative backtraces from errors and failures.

  • Unexpected errors are now printed with a simplified backtrace.

  • expect_error() and expect_condition() now display a backtrace
    when the error doesn't conform to expectations (#729).

  • expect_error(), expect_warning() and expect_message() now call
    conditionMessage() to get the condition message. This generic
    makes it possible to generate messages at print-time rather than
    signal-time.

  • expect_error() gets a better warning message when you test for a custom
    error class with regexp.

  • New exp_signal() function is a condition signaller that
    implements the testthat protocol (signal with stop() if the
    expectation is broken, with a continue_test restart).

  • Existence of restarts is first checked before invokation. This makes
    it possible to signal warnings or messages with a different
    condition signaller (#874).

  • ListReporter now tracks expectations and errors, even when they occur
    outside of tests. This ensures that stop_on_failure matches the results
    displayed by the reporter (#936).

  • You can silence warnings about untested error classes by
    implementing a method for is_uninformative_warning(). This method
    should be lazily registered, e.g. with vctrs::s3_register(). This
    is useful for introducing an experimental error class without
    encouraging users to depend on the class in their tests.

  • Respect options(warn = -1) to ignore all warnings (@jeroen #958).

Expectations

  • Expectations can now be explicitly subclassed with
    new_expectation(). This constructor follows our new conventions
    for S3 classes and takes an optional subclass and optional
    attributes.

  • Unquoted inputs no longer potentially generate multiple test messages (#929).

  • verify_output() no longer uses quasiquotation, which fixes issues
    when verifying the output of tidy eval functions (#945).

  • verify_output() gains a unicode parameter to turn on or off the
    use of Unicode characters by the cli package. It is disabled by
    default to prevent the tests from failing on platforms like Windows
    that don't support UTF-8 (which could be your contributors' or your
    CI machines).

  • verify_output() now correctly handles multi-line condition
    messages.

  • verify_output() now adds spacing after condition messages,
    consistent with the spacing added after normal output.

  • verify_output() has a new syntax for inserting headers in output
    files: insert a "# Header" string (starting with # as in
    Markdown) to add a header to a set of outputs.

Other minor improvements and bug fixes

  • compare.numeric() uses a more sophisticated default tolerance that will
    automatically skip tests that rely on numeric tolerance if long doubles are
    not available (#940).

  • JunitReporter now reports tests in ISO 8601 in the UTC timezone and
    uses the maximum precision of 3 decimal places (#923).