testthat 2.3.0
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()
andexpect_condition()
now display a backtrace
when the error doesn't conform to expectations (#729). -
expect_error()
,expect_warning()
andexpect_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 withregexp
. -
New
exp_signal()
function is a condition signaller that
implements the testthat protocol (signal withstop()
if the
expectation is broken, with acontinue_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 thatstop_on_failure
matches the results
displayed by the reporter (#936). -
You can silence warnings about untested error classes by
implementing a method foris_uninformative_warning()
. This method
should be lazily registered, e.g. withvctrs::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 aunicode
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.