Ensure every test to have either expect.assertions(<number of assertions>)
OR
expect.hasAssertions()
as its first expression.
This rule triggers a warning if,
expect.assertions(<number of assertions>)
ORexpect.hasAssertions()
is not present as first statement in a test, e.g.:
test('my test', () => {
expect(someThing()).toEqual('foo');
});
expect.assertions(<number of assertions>)
is the first statement in a test where argument passed toexpect.assertions(<number of assertions>)
is not a valid number, e.g.:
test('my test', () => {
expect.assertions('1');
expect(someThing()).toEqual('foo');
});
The following patterns are considered warnings:
test('my test', () => {
expect.assertions('1');
expect(someThing()).toEqual('foo');
});
test('my test', () => {
expect(someThing()).toEqual('foo');
});
The following patterns would not be considered warnings:
test('my test', () => {
expect.assertions(1);
expect(someThing()).toEqual('foo');
});
test('my test', () => {
expect.hasAssertions();
expect(someThing()).toEqual('foo');
});
When true
, this rule will only warn for tests that use the async
keyword.
{
"rules": {
"jest/prefer-expect-assertions": [
"warn",
{ "onlyFunctionsWithAsyncKeyword": true }
]
}
}
When onlyFunctionsWithAsyncKeyword
option is set to true
, the following
pattern would be a warning:
test('my test', async () => {
const result = await someAsyncFunc();
expect(result).toBe('foo');
});
While the following patterns would not be considered warnings:
test('my test', () => {
const result = someFunction();
expect(result).toBe('foo');
});
test('my test', async () => {
expect.assertions(1);
const result = await someAsyncFunc();
expect(result).toBe('foo');
});