Behavior-driven development
The function creates a block that groups together several related
tests. The it
function registers an individual test case.
There are 4 types of hooks available for test suites. A test suite can have
multiples of each type of hook, they will be called in the order that they are
registered. The afterEach
and afterAll
hooks will be called whether or not
the test case passes. The *All
hooks will be called once for the whole group
while the *Each
hooks will be called for each individual test case.
afterAll
: Runs after all of the tests in the test suite finish.beforeEach
: Runs before each of the individual test cases in the test suite.afterEach
: Runs after each of the individual test cases in the test suite.
If a hook is registered at the top level, a global test suite will be registered and all tests will belong to it. Hooks registered at the top level must be registered before any individual test cases or test suites.
Focusing tests
If you would like to run only specific test cases, you can do so by calling
it.only
instead of it
. If you would like to run only specific test suites,
you can do so by calling describe.only
instead of describe
.
If you would like to not run specific individual test cases, you can do so by
calling it.ignore
instead of it
. If you would like to not run specific test
suites, you can do so by calling describe.ignore
instead of describe
.
Sanitization options
Like Deno.TestDefinition
, the DescribeDefinition
and ItDefinition
have
sanitization options. They work in the same way.
sanitizeExit
: Ensure the test case does not prematurely cause the process to exit, for example via a call to Deno.exit. Defaults to true.sanitizeResources
: Ensure the test case does not “leak” resources - ie. the resource table after the test has exactly the same contents as before the test. Defaults to true.
Like Deno.TestDefinition
, the DescribeDefintion
and ItDefinition
have a
permissions
option. They specify the permissions that should be used to run an
individual test case or test suite. Set this to "inherit"
to keep the calling
thread’s permissions. Set this to to revoke all permissions.
This setting defaults to "inherit"
.
Comparing to Deno.test
The default way of writing tests is using Deno.test
and t.step
. The
describe
and it
functions have similar call signatures to Deno.test
,
making it easy to switch between the default style and the behavior-driven
development style of writing tests. Internally, describe
and it
are
registering tests with Deno.test
and t.step
.
Below is an example of a test file using Deno.test
and t.step
. In the
following sections there are examples of how the same test could be written with
describe
and it
using nested test grouping, flat test grouping, or a mix of
both styles.
Tests created within the callback of a describe
function call will belong to
the new test suite it creates. The hooks can be created within it or be added to
the options argument for describe.
The function returns a unique symbol that can be used to reference the test suite for adding tests to it without having to create them within a callback. The gives you the ability to have test grouping without any extra indentation in front of the grouped tests.