heartbeat method

void heartbeat()

Notifies the invoker that progress is being made.

Each heartbeat resets the timeout timer. This helps ensure that long-running tests that still make progress don't time out.

Implementation

void heartbeat() {
  if (liveTest.isComplete) return;
  if (_timeoutTimer != null) _timeoutTimer!.cancel();
  if (liveTest.suite.ignoreTimeouts == true) return;

  const defaultTimeout = Duration(seconds: 30);
  var timeout = liveTest.test.metadata.timeout.apply(defaultTimeout);
  if (timeout == null) return;
  String message() {
    var message = 'Test timed out after ${niceDuration(timeout)}.';
    if (timeout == defaultTimeout) {
      message += ' See https://pub.dev/packages/test#timeouts';
    }
    return message;
  }

  _timeoutTimer = Zone.root.createTimer(timeout, () {
    _outstandingCallbackZones.last.run(() {
      _handleError(Zone.current, TimeoutException(message(), timeout));
      _outstandingCallbacks.complete();
    });
  });
}