Fix timeout (#162)

diff --git a/lib/src/usage_impl.dart b/lib/src/usage_impl.dart
index 4d89968..b1ea566 100644
--- a/lib/src/usage_impl.dart
+++ b/lib/src/usage_impl.dart
@@ -228,7 +228,7 @@
       _trySendBatches(Completer<void>());
     }
     var f = Future.wait(_futures);
-    if (timeout != null) f = f.timeout(timeout);
+    if (timeout != null) f = f.timeout(timeout, onTimeout: () => []);
     return f;
   }
 
diff --git a/test/src/common.dart b/test/src/common.dart
index e934e71..b08d89b 100644
--- a/test/src/common.dart
+++ b/test/src/common.dart
@@ -28,6 +28,23 @@
   String get last => mockPostHandler.last;
 }
 
+class StallingAnalyticsImplMock extends AnalyticsImpl {
+  StallingAnalyticsImplMock(String trackingId, {Map<String, dynamic>? props})
+      : super(trackingId, MockProperties(props), StallingPostHandler(),
+            applicationName: 'Test App', applicationVersion: '0.1');
+}
+
+class StallingPostHandler extends PostHandler {
+  @override
+  void close() {}
+
+  @override
+  String encodeHit(Map<String, String> hit) => jsonEncode(hit);
+
+  @override
+  Future sendPost(String url, List<String> batch) => Completer().future;
+}
+
 class MockProperties extends PersistentProperties {
   Map<String, dynamic> props = {};
 
diff --git a/test/usage_impl_test.dart b/test/usage_impl_test.dart
index 21111b3..8b2739a 100644
--- a/test/usage_impl_test.dart
+++ b/test/usage_impl_test.dart
@@ -90,6 +90,13 @@
       return mock.waitForLastPing(timeout: Duration(milliseconds: 100));
     });
 
+    test('waitForLastPing times out', () async {
+      var mock = StallingAnalyticsImplMock('blahID');
+      // ignore: unawaited_futures
+      mock.sendScreenView('foo');
+      await mock.waitForLastPing(timeout: Duration(milliseconds: 100));
+    });
+
     group('clientId', () {
       test('is available immediately', () {
         var mock = createMock();