server_testing library

A comprehensive testing utility package for Dart applications.

This package provides tools for testing HTTP endpoints, browser automation, and JSON validation with a fluent, expressive API.

Main Components

  • HTTP Testing - Test HTTP endpoints with EngineTestClient
  • Browser Testing - Automate browser testing with the Browser interface
  • JSON Assertions - Make assertions on JSON with AssertableJson
  • Mocking Utilities - Mock HTTP requests and responses for testing

HTTP Testing Example

import 'package:server_testing/server_testing.dart';
import 'package:test/test.dart';

void main() {
  final handler = YourRequestHandler();

  engineTest('GET /users returns user list', (client) async {
    final response = await client.get('/users');

    response
        .assertStatus(200)
        .assertJson((json) {
          json.has('users');
        });
  }, handler: handler);
}

Browser Testing Example

import 'package:server_testing/server_testing.dart';

void main() async {
  final config = BrowserConfig(
    browserName: 'firefox',
    baseUrl: 'https://example.com',
  );

  await testBootstrap(config);

  await browserTest('guest can view homepage', (browser) async {
    await browser.visit('/');
    await browser.assertTitle('Example Domain');
  }, config: config);
}

Classes

BrowserConfig
BrowserDownloadProgress
BrowserFactory
Factory for creating browser instances with different WebDriver implementations.
BrowserManager
BrowserUpdate
BrowserUpdateChecker
Component
Base class for UI components in the page object pattern.
CustomMatcher
A base class for Matcher instances that match based on some feature of the value under test.
Description
Matchers build up their error messages by appending to Description objects.
Fake
A stand-in for another object which cannot be used except for specifically overridden methods.
isInstanceOf<T>
DEPRECATED Use isA instead.
Matcher
The base class for all matchers.
MissingDummyValueError
Mock
Extend or mixin this class to mark the implementation as a Mock.
MockHttpConnectionInfo
A class which mocks HttpConnectionInfo.
MockHttpHeaders
A class which mocks HttpHeaders.
MockHttpRequest
A class which mocks HttpRequest.
MockHttpResponse
A class which mocks HttpResponse.
MockUri
A class which mocks Uri.
OnPlatform
An annotation for platform-specific customizations for a test suite.
Page
Base class for the Page Object Pattern.
PostExpectation<T>
ProxyClient
ProxyConfiguration
RequestHandler
Defines the interface for handling HTTP requests.
Retry
An annotation for marking a test suite to be retried.
Skip
An annotation for marking a test suite as skipped.
SmartFake
A slightly smarter fake to be used for return value on missing stubs. Shows a more descriptive error message to the user that mentions not only a place where a fake was used but also why it was created (i.e. which stub needs to be added).
StreamMatcher
A matcher that matches events from Streams or StreamQueues.
StringDescription
The default implementation of Description. This should rarely need substitution, although conceivably it is a place where other languages could be supported.
Tags
An annotation for applying a set of user-defined tags to a test suite.
TestBootstrap
Internal class that maintains the global browser configuration.
TestClient
A client for testing HTTP endpoints with different transport modes.
TestLocation
The location of a test or group.
TestOn
An annotation indicating which platforms a test suite supports.
TestTransport
An abstract class that defines the transport mechanism for sending test requests. Implementations of this class should handle the specifics of how requests are sent and responses are received.
Throws
Use the throwsA function instead.
Timeout
A class representing a modification to the default timeout for a test.
TransportOptions
TypeMatcher<T>
A Matcher subclass that supports validating the Type of the target object.
VerificationResult
Information about a stub call verification.

Mixins

Browser
Core browser automation interface.

Extensions

HttpHeaderExtension on HttpHeaders
An extension on the HttpHeaders class to provide additional functionality.
ListOfVerificationResult on List<VerificationResult>
NumericAssertions on num
Extension providing assertion methods for numeric values.
NumericConditions on num
A collection of extension methods for numeric types that provide various mathematical and comparison operations.

Constants

anything → const Matcher
A matcher that matches any value.
isArgumentError → const TypeMatcher<ArgumentError>
A matcher for ArgumentError.
isCastError → const TypeMatcher<TypeError>
A matcher for TypeError.
isConcurrentModificationError → const TypeMatcher<ConcurrentModificationError>
A matcher for ConcurrentModificationError.
isCyclicInitializationError → const TypeMatcher<Error>
A matcher for Error.
isEmpty → const Matcher
Returns a matcher that matches the isEmpty property.
isException → const TypeMatcher<Exception>
A matcher for Exception.
isFalse → const Matcher
A matcher that matches anything except the Boolean value true.
isFormatException → const TypeMatcher<FormatException>
A matcher for FormatException.
isList → const TypeMatcher<List>
A matcher for List.
isMap → const TypeMatcher<Map>
A matcher for Map.
isNaN → const Matcher
A matcher that matches the numeric value NaN.
isNegative → const Matcher
A matcher which matches if the match argument is negative.
isNonNegative → const Matcher
A matcher which matches if the match argument is zero or positive.
isNonPositive → const Matcher
A matcher which matches if the match argument is zero or negative.
isNonZero → const Matcher
A matcher which matches if the match argument is non-zero.
isNoSuchMethodError → const TypeMatcher<NoSuchMethodError>
A matcher for NoSuchMethodError.
isNotEmpty → const Matcher
Returns a matcher that matches the isNotEmpty property.
isNotNaN → const Matcher
A matcher that matches any non-NaN value.
isNotNull → const Matcher
A matcher that matches any non-null value.
isNull → const Matcher
A matcher that matches any null value.
isNullThrownError → const TypeMatcher<TypeError>
A matcher for TypeError.
isPositive → const Matcher
A matcher which matches if the match argument is positive.
isRangeError → const TypeMatcher<RangeError>
A matcher for RangeError.
isStateError → const TypeMatcher<StateError>
A matcher for StateError.
isTrue → const Matcher
A matcher that matches the Boolean value true.
isUnimplementedError → const TypeMatcher<UnimplementedError>
A matcher for UnimplementedError.
isUnsupportedError → const TypeMatcher<UnsupportedError>
A matcher for UnsupportedError.
isZero → const Matcher
A matcher which matches if the match argument is zero.
returnsNormally → const Matcher
A matcher that matches a function call against no exception.
throws → const Matcher
This function is deprecated.
throwsArgumentError → const Matcher
A matcher for functions that throw ArgumentError.
throwsConcurrentModificationError → const Matcher
A matcher for functions that throw ConcurrentModificationError.
throwsCyclicInitializationError → const Matcher
A matcher for functions that throw CyclicInitializationError.
throwsException → const Matcher
A matcher for functions that throw Exception.
throwsFormatException → const Matcher
A matcher for functions that throw FormatException.
throwsNoSuchMethodError → const Matcher
A matcher for functions that throw NoSuchMethodError.
throwsNullThrownError → const Matcher
A matcher for functions that throw NullThrownError.
throwsRangeError → const Matcher
A matcher for functions that throw RangeError.
throwsStateError → const Matcher
A matcher for functions that throw StateError.
throwsUnimplementedError → const Matcher
A matcher for functions that throw Exception.
throwsUnsupportedError → const Matcher
A matcher for functions that throw UnsupportedError.

Properties

any Null
An argument matcher that matches any argument passed in this argument position.
no setter
captureAny Null
An argument matcher that matches any argument passed in this argument position, and captures the argument for later access with VerificationResult.captured.
no setter
completes Matcher
Matches a Future that completes successfully with any value.
final
doesNotComplete Matcher
Matches a Future that does not complete.
final
emitsDone StreamMatcher
Returns a StreamMatcher that asserts that the stream emits a "done" event.
final
neverCalled Null Function([Object?, Object?, Object?, Object?, Object?, Object?, Object?, Object?, Object?, Object?])
Returns a function that causes the test to fail if it's called.
no setter
untilCalled → InvocationLoader
Returns a future Invocation that will complete upon the first occurrence of the given invocation.
no setter
verify Verification
Verify that a method on a mock object was called with the given arguments.
no setter
verifyInOrder List<VerificationResult> Function<T>(List<T> recordedInvocations)
Verifies that a list of methods on a mock object have been called with the given arguments. For example:
no setter
verifyNever Verification
Verify that a method on a mock object was never called with the given arguments.
no setter
when Expectation
Create a stub method response.
no setter

Functions

addStateInfo(Map matchState, Map values) → void
Useful utility for nesting match states.
addTearDown(dynamic callback()) → void
Registers a function to be run after the current test.
allOf(Object? arg0, [Object? arg1, Object? arg2, Object? arg3, Object? arg4, Object? arg5, Object? arg6]) Matcher
This returns a matcher that matches if all of the matchers passed as arguments (up to 7) match.
anyElement(Object? valueOrMatcher) Matcher
Returns a matcher which matches Iterables in which at least one element matches the given valueOrMatcher.
anyNamed(String named) Null
An argument matcher that matches any named argument passed in for the parameter named named.
anyOf(Object? arg0, [Object? arg1, Object? arg2, Object? arg3, Object? arg4, Object? arg5, Object? arg6]) Matcher
Matches if any of the given matchers evaluate to true.
argThat(Matcher matcher, {String? named}) Null
An argument matcher that matches an argument (named or positional) that matches matcher. When capturing a named argument, the name of the argument must be passed via named.
browserGroup(String description, {required void define(Browser browser), BrowserConfig? config, bool useAsync = true}) → void
Creates a group of browser tests that share a browser instance.
browserTest(String description, Future<void> callback(Browser browser), {BrowserConfig? config, bool useAsync = true}) Future<void>
Creates a browser test.
captureAnyNamed(String named) Null
An argument matcher that matches any named argument passed in for the parameter named named, and captures the argument for later access with VerificationResult.captured.
captureThat(Matcher matcher, {String? named}) Null
An argument matcher that matches an argument (named or positional) that matches matcher, and captures the argument for later access with VerificationResult.captured. When capturing a named argument, the name of the argument must be passed via named.
clearInteractions(dynamic mock) → void
Clear the collected interactions with mock.
closeTo(num value, num delta) Matcher
Returns a matcher which matches if the match argument is within delta of some value.
collapseWhitespace(String string) String
Utility function to collapse whitespace runs to single spaces and strip leading/trailing whitespace.
completion(Object? matcher, [String? description]) Matcher
Matches a Future that completes successfully with a value that matches matcher.
contains(Object? expected) Matcher
Returns a matcher that matches if the match argument contains the expected value.
containsAll(Iterable expected) Matcher
Matches Iterables which contain an element matching every value in expected in any order, and may contain additional values.
containsAllInOrder(Iterable expected) Matcher
Matches Iterables which contain an element matching every value in expected in the same order, but may contain additional values interleaved throughout.
containsOnce(Object? expected) Matcher
Matches Iterables where exactly one element matches the expected value, and all other elements don't match.
containsPair(Object? key, Object? valueOrMatcher) Matcher
Returns a matcher which matches maps containing the key-value pair with key => valueOrMatcher.
containsValue(Object? value) Matcher
Returns a matcher which matches maps containing the given value.
emits(Object? matcher) StreamMatcher
Returns a StreamMatcher for matcher.
emitsAnyOf(Iterable matchers) StreamMatcher
Returns a StreamMatcher that matches the stream if at least one of matchers matches.
emitsError(Object? matcher) StreamMatcher
Returns a StreamMatcher that matches a single error event that matches matcher.
emitsInAnyOrder(Iterable matchers) StreamMatcher
Returns a StreamMatcher that matches the stream if each matcher in matchers matches, in any order.
emitsInOrder(Iterable matchers) StreamMatcher
Returns a StreamMatcher that matches the stream if each matcher in matchers matches, one after another.
emitsThrough(Object? matcher) StreamMatcher
Returns a StreamMatcher that matches any number of events followed by events that match matcher.
endsWith(String suffixString) Matcher
Returns a matcher that matches if the match argument is a string and ends with suffixString.
equals(Object? expected, [int limit = 100]) Matcher
Returns a matcher that matches if the value is structurally equal to expected.
equalsIgnoringCase(String value) Matcher
Returns a matcher which matches if the match argument is a string and is equal to value when compared case-insensitively.
equalsIgnoringWhitespace(String value) Matcher
Returns a matcher which matches if the match argument is a string and is equal to value, ignoring whitespace.
escape(String str) String
Returns str with all whitespace characters represented as their escape sequences.
everyElement(Object? valueOrMatcher) Matcher
Returns a matcher which matches Iterables in which all elements match the given valueOrMatcher.
expect(dynamic actual, dynamic matcher, {String? reason, Object? skip, bool verbose = false, ErrorFormatter? formatter}) → void
Assert that actual matches matcher.
expectAsync(Function callback, {int count = 1, int max = 0, String? id, String? reason}) Function
This function is deprecated because it doesn't work well with strong mode. Use expectAsync0, expectAsync1, expectAsync2, expectAsync3, expectAsync4, expectAsync5, or expectAsync6 instead.
expectAsync0<T>(T callback(), {int count = 1, int max = 0, String? id, String? reason}) Func0<T>
Informs the framework that the given callback of arity 0 is expected to be called count number of times (by default 1).
expectAsync1<T, A>(T callback(A), {int count = 1, int max = 0, String? id, String? reason}) Func1<T, A>
Informs the framework that the given callback of arity 1 is expected to be called count number of times (by default 1).
expectAsync2<T, A, B>(T callback(A, B), {int count = 1, int max = 0, String? id, String? reason}) Func2<T, A, B>
Informs the framework that the given callback of arity 2 is expected to be called count number of times (by default 1).
expectAsync3<T, A, B, C>(T callback(A, B, C), {int count = 1, int max = 0, String? id, String? reason}) Func3<T, A, B, C>
Informs the framework that the given callback of arity 3 is expected to be called count number of times (by default 1).
expectAsync4<T, A, B, C, D>(T callback(A, B, C, D), {int count = 1, int max = 0, String? id, String? reason}) Func4<T, A, B, C, D>
Informs the framework that the given callback of arity 4 is expected to be called count number of times (by default 1).
expectAsync5<T, A, B, C, D, E>(T callback(A, B, C, D, E), {int count = 1, int max = 0, String? id, String? reason}) Func5<T, A, B, C, D, E>
Informs the framework that the given callback of arity 5 is expected to be called count number of times (by default 1).
expectAsync6<T, A, B, C, D, E, F>(T callback(A, B, C, D, E, F), {int count = 1, int max = 0, String? id, String? reason}) Func6<T, A, B, C, D, E, F>
Informs the framework that the given callback of arity 6 is expected to be called count number of times (by default 1).
expectAsyncUntil0<T>(T callback(), bool isDone(), {String? id, String? reason}) Func0<T>
Informs the framework that the given callback of arity 0 is expected to be called until isDone returns true.
expectAsyncUntil1<T, A>(T callback(A), bool isDone(), {String? id, String? reason}) Func1<T, A>
Informs the framework that the given callback of arity 1 is expected to be called until isDone returns true.
expectAsyncUntil2<T, A, B>(T callback(A, B), bool isDone(), {String? id, String? reason}) Func2<T, A, B>
Informs the framework that the given callback of arity 2 is expected to be called until isDone returns true.
expectAsyncUntil3<T, A, B, C>(T callback(A, B, C), bool isDone(), {String? id, String? reason}) Func3<T, A, B, C>
Informs the framework that the given callback of arity 3 is expected to be called until isDone returns true.
expectAsyncUntil4<T, A, B, C, D>(T callback(A, B, C, D), bool isDone(), {String? id, String? reason}) Func4<T, A, B, C, D>
Informs the framework that the given callback of arity 4 is expected to be called until isDone returns true.
expectAsyncUntil5<T, A, B, C, D, E>(T callback(A, B, C, D, E), bool isDone(), {String? id, String? reason}) Func5<T, A, B, C, D, E>
Informs the framework that the given callback of arity 5 is expected to be called until isDone returns true.
expectAsyncUntil6<T, A, B, C, D, E, F>(T callback(A, B, C, D, E, F), bool isDone(), {String? id, String? reason}) Func6<T, A, B, C, D, E, F>
Informs the framework that the given callback of arity 6 is expected to be called until isDone returns true.
expectLater(dynamic actual, dynamic matcher, {String? reason, Object? skip}) Future
Just like expect, but returns a Future that completes when the matcher has finished matching.
fail(String message) → Never
Convenience method for throwing a new TestFailure with the provided message.
greaterThan(Object value) Matcher
Returns a matcher which matches if the match argument is greater than the given value.
greaterThanOrEqualTo(Object value) Matcher
Returns a matcher which matches if the match argument is greater than or equal to the given value.
group(Object? description, dynamic body(), {String? testOn, Timeout? timeout, Object? skip, Object? tags, Map<String, dynamic>? onPlatform, int? retry, TestLocation? location, bool solo = false}) → void
Creates a group of tests.
hasLength(Object? matcher) Matcher
Returns a matcher that matches if an object has a length property that matches matcher.
inClosedOpenRange(num low, num high) Matcher
Returns a matcher which matches if the match argument is greater than or equal to a low and less than high.
inExclusiveRange(num low, num high) Matcher
Returns a matcher which matches if the match argument is greater than low and less than high.
inInclusiveRange(num low, num high) Matcher
Returns a matcher which matches if the match argument is greater than or equal to low and less than or equal to high.
inOpenClosedRange(num low, num high) Matcher
Returns a matcher which matches if the match argument is greater than low and less than or equal to high.
isA<T>() TypeMatcher<T>
Returns a matcher that matches objects with type T.
isIn(Object? expected) Matcher
Returns a matcher that matches if the match argument is in the expected value. This is the converse of contains.
isNot(Object? valueOrMatcher) Matcher
Returns a matcher that inverts valueOrMatcher to its logical negation.
launchBrowser(BrowserConfig? config, [bool useAsync = true]) Future<Browser>
Launches a browser with the specified configuration.
lessThan(Object value) Matcher
Returns a matcher which matches if the match argument is less than the given value.
lessThanOrEqualTo(Object value) Matcher
Returns a matcher which matches if the match argument is less than or equal to the given value.
logInvocations(List<Mock> mocks) → void
Print all collected invocations of any mock methods of mocks.
markTestSkipped(String message) → void
Marks the current test as skipped.
matches(Pattern re) Matcher
Returns a matcher that matches if the match argument is a string and matches the regular expression given by re.
mayEmit(Object? matcher) StreamMatcher
Returns a StreamMatcher that allows (but doesn't require) matcher to match the stream.
mayEmitMultiple(Object? matcher) StreamMatcher
Returns a StreamMatcher that matches any number of events that match matcher.
named<T extends Mock>(T mock, {String? name, int? hashCode}) → T
neverEmits(Object? matcher) StreamMatcher
Returns a StreamMatcher that matches a stream that never matches matcher.
orderedEquals(Iterable expected) Matcher
Returns a matcher which matches Iterables that have the same length and the same elements as expected, in the same order.
pairwiseCompare<S, T>(Iterable<S> expected, bool comparator(S, T), String description) Matcher
A pairwise matcher for Iterables.
predicate<T>(bool f(T), [String description = 'satisfies function']) Matcher
Returns a matcher that uses an arbitrary function that returns whether the value is considered a match.
printOnFailure(String message) → void
Prints message if and when the current test fails.
prints(Object? matcher) Matcher
Matches a Function that prints text that matches matcher.
provideDummy<T>(T dummy) → void
Provide a dummy value for T to be used both while adding expectations and as a default value for unstubbed methods, if using a nice mock.
provideDummyBuilder<T>(DummyBuilder<T> dummyBuilder) → void
Provide a builder for that could create a dummy value of type T. This could be useful for nice mocks, such that information about the specific invocation that caused the creation of a dummy value could be preserved.
pumpEventQueue({int times = 20}) Future
Returns a Future that completes after the event loop has run the given number of times (20 by default).
registerException(Object error, [StackTrace stackTrace = StackTrace.empty]) → void
Registers an exception that was caught for the current test.
reset(dynamic mock) → void
Clear stubs of, and collected interactions with mock.
resetMockitoState() → void
Reset the state of Mockito, typically for use between tests.
same(Object? expected) Matcher
Returns a matches that matches if the value is the same instance as expected, using identical.
serverTest(String description, TestCallback callback, {required RequestHandler handler, TransportMode transportMode = TransportMode.inMemory, Timeout? timeout, Object? skip, Object? tags, Map<String, dynamic>? onPlatform, int? retry}) → void
Creates a test that uses an TestClient to test HTTP endpoints.
setUp(dynamic callback()) → void
Registers a function to be run before tests.
setUpAll(dynamic callback(), {TestLocation? location}) → void
Registers a function to be run once before all tests.
setupHeaders(Map<String, List<String>> requestHeaders) MockHttpHeaders
Sets up mock HTTP headers with the given request headers map.
setupRequest(String method, String uri, {MockHttpHeaders? mockRequestHeaders, Uri? uriObj, Map<String, List<String>>? requestHeaders, List<Cookie>? cookies, dynamic body, MockHttpResponse? mockResponse, InternetAddress? remoteAddress}) MockHttpRequest
Sets up a mock HTTP request with the specified method and URI.
setupResponse({Map<String, List<String>>? headers, List<Cookie>? cookies, BytesBuilder? body}) MockHttpResponse
Sets up a mock HTTP response with the given headers and body.
setupUri(String url) MockUri
Creates a mock Uri object with the same properties as the provided uri.
spawnHybridCode(String dartCode, {Object? message, bool stayAlive = false}) → StreamChannel
Spawns a VM isolate that runs the given dartCode, which is loaded as the contents of a Dart library.
spawnHybridUri(Object uri, {Object? message, bool stayAlive = false}) → StreamChannel
Spawns a VM isolate for the given uri, which may be a Uri or a String.
startsWith(String prefixString) Matcher
Returns a matcher that matches if the match argument is a string and starts with prefixString.
stringContainsInOrder(List<String> substrings) Matcher
Returns a matcher that matches if the match argument is a string and contains a given list of substrings in relative order.
tearDown(dynamic callback()) → void
Registers a function to be run after tests.
tearDownAll(dynamic callback(), {TestLocation? location}) → void
Registers a function to be run once after all tests.
test(Object? description, dynamic body(), {String? testOn, Timeout? timeout, Object? skip, Object? tags, Map<String, dynamic>? onPlatform, int? retry, TestLocation? location, bool solo = false}) → void
Creates a new test case with the given description (converted to a string) and body.
testBootstrap([BrowserConfig? config]) Future<void>
Initializes the browser testing environment.
throwOnMissingStub(Mock mock, {void exceptionBuilder(Invocation)?}) → void
Opt-into Mock throwing NoSuchMethodError for unimplemented methods.
throwsA(Object? matcher) Matcher
This can be used to match three kinds of objects:
unorderedEquals(Iterable expected) Matcher
Returns a matcher which matches Iterables that have the same length and the same elements as expected, but not necessarily in the same order.
unorderedMatches(Iterable expected) Matcher
Returns a matcher which matches Iterables whose elements match the matchers in expected, but not necessarily in the same order.
verifyNoMoreInteractions(dynamic mock) → void
verifyZeroInteractions(dynamic mock) → void
wrapMatcher(Object? valueOrMatcher) Matcher
Takes an argument and returns an equivalent Matcher.

Typedefs

Answering<T> = T Function(Invocation realInvocation)
ErrorFormatter = String Function(Object? actual, Matcher matcher, String? reason, Map matchState, bool verbose)
The type used for functions that can be used to build up error reports upon failures in expect.
Expectation = PostExpectation<T> Function<T>(T x)
Func0<T> = T Function()
Func1<T, A> = T Function([A a])
Func2<T, A, B> = T Function([A a, B b])
Func3<T, A, B, C> = T Function([A a, B b, C c])
Func4<T, A, B, C, D> = T Function([A a, B b, C c, D d])
Func5<T, A, B, C, D, E> = T Function([A a, B b, C c, D d, E e])
Func6<T, A, B, C, D, E, F> = T Function([A a, B b, C c, D d, E e, F f])
TestCallback = Future<void> Function(TestClient client, RequestHandler handler)
Callback type for test functions that use TestClient
Verification = VerificationResult Function<T>(T matchingInvocations)

Exceptions / Errors

FakeFunctionUsedError
FakeUsedError
MissingStubError
An error which is thrown when no stub is found which matches the arguments of a real method call on a mock object.
TestFailure
An exception thrown when a test assertion fails.