Descriptions are concatenated (e.g., "Group Description Test Description").
Helps scope
setUp
and
tearDown
calls.
Naming
Use
PascalCase
for groups that correspond to a class name
(e.g.,
group('MyClient', ...)
).
Avoid Single Groups
Do not wrap all tests in a file with a single
group
call if it's the only one.
Naming Tests
:
Avoid redundant "test" prefixes.
Include the expected behavior or outcome in the description (e.g.,
'throws StateError'
or
'adds API key to URL'
).
Descriptions should read well when concatenated with their group name.
Named Parameters Placement
:
For
test
and
group
calls, place named parameters (e.g.,
testOn
,
timeout
,
skip
) immediately after the description string, before the
callback closure. This improves readability by keeping the test logic last.
test
(
'description'
,
testOn
:
'vm'
,
(
)
{
// assertions
}
)
;
2. Lifecycle Methods (
setUp
,
tearDown
)
setUp
Runs
before
every
test
in the current
group
(and nested
groups).
tearDown
Runs
after
every
test
in the current
group
.
setUpAll
Runs
once
before any test in the group.
tearDownAll
Runs
once
after all tests in the group.
Best Practice:
Use
setUp
for resetting state to ensure test isolation.
Avoid sharing mutable state between tests without resetting it.
3. Configuration (
dart_test.yaml
)
The
dart_test.yaml
file configures the test runner. Common configurations
include:
Platforms
Define where tests run (vm, chrome, node).
platforms
:
-
vm
-
chrome
Tags
Categorize tests to run specific subsets.
tags
:
integration
:
timeout
:
2x
Usage in code:
@Tags
(
[
'integration'
]
)
import
'package:test/test.dart'
;
Running tags:
dart test --tags integration
Timeouts
Set default timeouts for tests.
timeouts
:
2x