Skip to main content

avoid-misused-test-matchers

added in: 1.12.0
preset: recommended

Warns when an incorrect matcher or literal is used to verify the target expression.

info

This rule supports only matchers provided by the test package.

List of supported matchers
  • isNot
  • allOf
  • anyOf
  • isEmpty
  • isNotEmpty
  • isNull
  • isNotNull
  • isTrue
  • isFalse
  • returnsNormally
  • prints
  • isMap
  • isList
  • hasLength
  • contains
  • isIn
  • equals
  • everyElement
  • anyElement
  • orderedEquals
  • unorderedEquals
  • unorderedMatches
  • pairwiseCompare
  • containsAll
  • containsAllInOrder
  • containsOnce
  • containsValue
  • containsPair
  • closeTo
  • inInclusiveRange
  • inExclusiveRange
  • inOpenClosedRange
  • inClosedOpenRange
  • isZero
  • isNonZero
  • isPositive
  • isNonPositive
  • isNegative
  • isNonNegative
  • greaterThan
  • greaterThanOrEqualTo
  • lessThan
  • lessThanOrEqualTo
  • equalsIgnoringCase
  • equalsIgnoringWhitespace
  • startsWith
  • endsWith
  • stringContainsInOrder
  • matches
  • isA
  • completes
  • doesNotComplete
  • emitsDone
  • emits
  • emitsError
  • mayEmit
  • emitsAnyOf
  • emitsInOrder
  • emitsThrough
  • mayEmitMultiple
  • neverEmits
  • emitsInAnyOrder
  • throwsA
  • throwsException
  • throwsStateError
  • throwsUnimplementedError

Example

❌ Bad:

const _someNumber = 1;
const _someString = '1';
const _someList = [1, 2, 3];

void fn() {
expect(_someString, isList); // LINT
expect({1}, isList); // LINT
expect(_someNumber, isEmpty); // LINT
expect(_someNumber, isNull); // LINT
expect(_someNumber, isNotNull); // LINT
expect(_someNumber, hasLength(1)); // LINT
expect(_someString, equals(<int>[])); // LINT
expect(_someString, allOf(isZero, isA<num>())); // LINT
}

✅ Good:

const _someNumber = 1;
const _someString = '1';
const _someList = [1, 2, 3];

void fn() {
expect(_someString, isA<String>);
expect(_someList, isList);
expect(_someNumber, isZero);
expect(_someList, hasLength(1));
expect(_someList, contains(1));
}