diff --git a/test/barback/all_includes_all_default_directories_test.dart b/test/barback/all_includes_all_default_directories_test.dart
index 9e96e5417df337c708f172891158923c1dd7bf7a..1cc0c0a6f005f46490a15f3fc1cb56fc971a4450 100644
--- a/test/barback/all_includes_all_default_directories_test.dart
+++ b/test/barback/all_includes_all_default_directories_test.dart
@@ -49,7 +49,7 @@ main() {
   });
 
   integration("serve --all finds assets in default source directories", () {
-    pubServe(args: ["--all"]);
+    pubServe(args: ["--all"], shouldGetFirst: true);
 
     requestShouldSucceed("file.txt", "benchmark", root: "benchmark");
     requestShouldSucceed("file.txt", "bin", root: "bin");
diff --git a/test/barback/directory_args_test.dart b/test/barback/directory_args_test.dart
index 4a0c12d6fddd55586d315802a07a25edb2c2aa60..64e8b8660fe830f85d2c386933d3c6e252df81b6 100644
--- a/test/barback/directory_args_test.dart
+++ b/test/barback/directory_args_test.dart
@@ -38,7 +38,7 @@ main() {
   });
 
   integration("serves only the given directories", () {
-    pubServe(args: ["foo", "bar"]);
+    pubServe(args: ["foo", "bar"], shouldGetFirst: true);
 
     requestShouldSucceed("file.txt", "bar", root: "bar");
     requestShouldSucceed("file.txt", "foo", root: "foo");
diff --git a/test/barback/subdirectories_test.dart b/test/barback/subdirectories_test.dart
index 5a74f387f1eaed5ed6bababa4bb4b18207bf0b1d..f08d9a12a0f66c9a9e30f7a82f1551e54dc838fb 100644
--- a/test/barback/subdirectories_test.dart
+++ b/test/barback/subdirectories_test.dart
@@ -50,7 +50,7 @@ main() {
   });
 
   integration("serves subdirectories", () {
-    pubServe(args: [webOne, webTwoInner]);
+    pubServe(args: [webOne, webTwoInner], shouldGetFirst: true);
 
     requestShouldSucceed("inner/file.txt", "one", root: webOne);
     requestShouldSucceed("file.txt", "two", root: webTwoInner);
diff --git a/test/dart2js/converts_isolate_entrypoint_in_web_test.dart b/test/dart2js/converts_isolate_entrypoint_in_web_test.dart
index 4dcc256555c18f82e05a88b8743011ac44d4ef96..90e8c5e3078cd0686cb6d209a552bda1d0c36c72 100644
--- a/test/dart2js/converts_isolate_entrypoint_in_web_test.dart
+++ b/test/dart2js/converts_isolate_entrypoint_in_web_test.dart
@@ -22,7 +22,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("isolate.dart.js", contains("hello"));
     endPubServe();
   });
diff --git a/test/dart2js/does_not_compile_if_disabled_test.dart b/test/dart2js/does_not_compile_if_disabled_test.dart
index 5e4af90a7e4d017c8e155da6bea0b898385d988c..3c8872c10db0162044b9abb4cca61bd15122a21e 100644
--- a/test/dart2js/does_not_compile_if_disabled_test.dart
+++ b/test/dart2js/does_not_compile_if_disabled_test.dart
@@ -15,7 +15,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["--no-dart2js"]);
+    pubServe(args: ["--no-dart2js"], shouldGetFirst: true);
     requestShould404("main.dart.js");
     endPubServe();
   });
diff --git a/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart b/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart
index 314c861bec4700e0cdbbc1551054e13141044257..448f3c2f6414b0596283b7d4a99c5f73ae3bd989 100644
--- a/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart
+++ b/test/dart2js/does_not_compile_until_its_output_is_requested_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    var server = pubServe();
+    var server = pubServe(shouldGetFirst: true);
     server.stdout.expect("Build completed successfully");
 
     // Once we request the output, it should start compiling and fail.
diff --git a/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart b/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart
index 6a00ff8ba6391b1328b7b8a226e345e52da2165b..f3cc5465c91802d385412caf8cd799a8f0fb5b8b 100644
--- a/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart
+++ b/test/dart2js/does_not_support_invalid_command_line_options_type_test.dart
@@ -20,7 +20,7 @@ main() {
       d.dir("web", [d.file("main.dart", "void main() {}")])
     ]).create();
 
-    var server = pubServe();
+    var server = pubServe(shouldGetFirst: true);
     // Make a request first to trigger compilation.
     requestShould404("main.dart.js");
     server.stderr.expect(emitsLines(
diff --git a/test/dart2js/does_not_support_invalid_environment_type_test.dart b/test/dart2js/does_not_support_invalid_environment_type_test.dart
index 43140afa1e5d1d6c019f2cd655a100f52eb0f7d2..6fffe7e29e23ec18fccd37632c5bbddb3f739ad4 100644
--- a/test/dart2js/does_not_support_invalid_environment_type_test.dart
+++ b/test/dart2js/does_not_support_invalid_environment_type_test.dart
@@ -20,7 +20,7 @@ main() {
       d.dir("web", [d.file("main.dart", "void main() {}")])
     ]).create();
 
-    var server = pubServe();
+    var server = pubServe(shouldGetFirst: true);
     // Make a request first to trigger compilation.
     requestShould404("main.dart.js");
     server.stderr.expect(emitsLines(
diff --git a/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart b/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart
index e259d178a6c9f8541441f79947440323c372e129..91e43fc0bd0f3faf7d57ccf4630adcf6bd10567f 100644
--- a/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart
+++ b/test/dart2js/doesnt_support_invalid_type_for_boolean_option_test.dart
@@ -20,7 +20,7 @@ main() {
       d.dir("web", [d.file("main.dart", "void main() {}")])
     ]).create();
 
-    var server = pubServe();
+    var server = pubServe(shouldGetFirst: true);
     requestShould404("main.dart.js");
     server.stderr.expect(emitsLines(
         'Build error:\n'
diff --git a/test/dart2js/environment_constant_test.dart b/test/dart2js/environment_constant_test.dart
index 1128105a126c0327868a3fa973035369dafe6f61..117160655bff8367eee8496ae294117f9e9fc013 100644
--- a/test/dart2js/environment_constant_test.dart
+++ b/test/dart2js/environment_constant_test.dart
@@ -38,7 +38,7 @@ main() {
     });
 
     integration('from "pub serve"', () {
-      pubServe(args: ["--define", "name=fblthp"]);
+      pubServe(args: ["--define", "name=fblthp"], shouldGetFirst: true);
       requestShouldSucceed("file.dart.js", contains("fblthp"));
       endPubServe();
     });
@@ -53,7 +53,7 @@ main() {
         })
       ]).create();
 
-      pubServe(args: ["--define", "name=fblthp"]);
+      pubServe(args: ["--define", "name=fblthp"], shouldGetFirst: true);
       requestShouldSucceed("file.dart.js", allOf([
         contains("fblthp"),
         isNot(contains("slartibartfast"))
diff --git a/test/dart2js/ignores_entrypoints_in_lib_test.dart b/test/dart2js/ignores_entrypoints_in_lib_test.dart
index 5feba3a9a7bc26437f912d3ae32df93c7833c916..2aaed36c46882734b65e7a662ecdd42df21f881a 100644
--- a/test/dart2js/ignores_entrypoints_in_lib_test.dart
+++ b/test/dart2js/ignores_entrypoints_in_lib_test.dart
@@ -33,7 +33,7 @@ main() {
   });
 
   integration("serve ignores Dart entrypoints in lib", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShould404("packages/myapp/main.dart.js");
     endPubServe();
   });
diff --git a/test/dart2js/ignores_non_entrypoint_dart_files_test.dart b/test/dart2js/ignores_non_entrypoint_dart_files_test.dart
index 8c639e590a3ef32c00b6fd1d1c9ca43001c37c26..00fa76157ec445b02f0b2356bff280a895037abd 100644
--- a/test/dart2js/ignores_non_entrypoint_dart_files_test.dart
+++ b/test/dart2js/ignores_non_entrypoint_dart_files_test.dart
@@ -33,7 +33,7 @@ main() {
   });
 
   integration("serve ignores non-entrypoint Dart files", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShould404("file1.dart.js");
     requestShould404("file2.dart.js");
     requestShould404("file3.dart.js");
diff --git a/test/dart2js/minifies_in_release_mode_test.dart b/test/dart2js/minifies_in_release_mode_test.dart
index 48621407fc2749e5af6b188841ebc35e1fd66e0d..5369e27af63181340272c297a816a7fb14dd59b7 100644
--- a/test/dart2js/minifies_in_release_mode_test.dart
+++ b/test/dart2js/minifies_in_release_mode_test.dart
@@ -15,7 +15,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["--mode", "release"]);
+    pubServe(args: ["--mode", "release"], shouldGetFirst: true);
     requestShouldSucceed("main.dart.js", isMinifiedDart2JSOutput);
     endPubServe();
   });
diff --git a/test/dart2js/minify_configuration_overrides_mode_test.dart b/test/dart2js/minify_configuration_overrides_mode_test.dart
index 3bc9361106ec28ca52c412d40be28b3ef8ec95c4..de89510302e5341196bdd74ee1f195e3c8dfb078 100644
--- a/test/dart2js/minify_configuration_overrides_mode_test.dart
+++ b/test/dart2js/minify_configuration_overrides_mode_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("main.dart.js", isMinifiedDart2JSOutput);
     endPubServe();
   });
diff --git a/test/dart2js/output_can_be_consumed_by_successive_phases.dart b/test/dart2js/output_can_be_consumed_by_successive_phases.dart
index 374e845426eba12024a5806be1aaa077c2ccdac6..cdc5cf536944be408eb69d15d3d0ce822f9cd2db 100644
--- a/test/dart2js/output_can_be_consumed_by_successive_phases.dart
+++ b/test/dart2js/output_can_be_consumed_by_successive_phases.dart
@@ -42,7 +42,7 @@ main() {
 
       createLockFile('myapp', pkg: ['barback']);
 
-      pubServe();
+      pubServe(shouldGetFirst: true);
       requestShouldSucceed("main.dart.out", isUnminifiedDart2JSOutput);
       endPubServe();
     });
diff --git a/test/dart2js/passes_along_environment_constants_test.dart b/test/dart2js/passes_along_environment_constants_test.dart
index e56ce5a725bfb3ff67d3e7c05909ac26bb88da3f..68c6953985eb057bf3640d4d7893a4cd48cdc531 100644
--- a/test/dart2js/passes_along_environment_constants_test.dart
+++ b/test/dart2js/passes_along_environment_constants_test.dart
@@ -28,7 +28,7 @@ void main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("main.dart.js", contains("hello"));
     endPubServe();
   });
diff --git a/test/dart2js/reports_dart_parse_errors_test.dart b/test/dart2js/reports_dart_parse_errors_test.dart
index 120f3afae74267d8e51b88933d83cfe4b2283d7f..be076fb085de2a5adf9071b1bbc8a16bfa121817 100644
--- a/test/dart2js/reports_dart_parse_errors_test.dart
+++ b/test/dart2js/reports_dart_parse_errors_test.dart
@@ -27,6 +27,7 @@ main() {
       ])
     ]).create();
 
+    pubGet();
     var pub = startPub(args: ["build"]);
     pub.stdout.expect(startsWith("Loading source assets..."));
     pub.stdout.expect(startsWith("Building myapp..."));
diff --git a/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart b/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart
index f6a1267598a7d58e8aeceb405ccae1d900f292a9..94bbe8f0c6f31ff79090f7fd7362082634ba3288 100644
--- a/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart
+++ b/test/dart2js/source_maps_include_core_libs_in_subdirectory_test.dart
@@ -26,7 +26,7 @@ main() {
     ]).create();
 
     var webSub = path.join("web", "sub");
-    pubServe(args: [webSub]);
+    pubServe(args: [webSub], shouldGetFirst: true);
 
     requestShouldSucceed("main.dart.js.map",
         contains(r"packages/$sdk/lib/core/duration.dart"),
diff --git a/test/dart2js/supports_valid_options_test.dart b/test/dart2js/supports_valid_options_test.dart
index 17fb66d389b0535494da6dbe4b03ff1e3d838b57..ec02f4dd19cff2d88b1dc7e5bb7ed70d5968561c 100644
--- a/test/dart2js/supports_valid_options_test.dart
+++ b/test/dart2js/supports_valid_options_test.dart
@@ -35,7 +35,7 @@ main() {
     ]).create();
 
     // None of these options should be rejected, either by pub or by dart2js.
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("main.dart.js", isNot(isEmpty));
     endPubServe();
   });
diff --git a/test/dart2js/unminified_in_nonrelease_mode_test.dart b/test/dart2js/unminified_in_nonrelease_mode_test.dart
index 831ad6d8821d17055b77256cb769eab4fdd8de95..ef8187c9cf6876baa9cde4d339440ab2d5c5072f 100644
--- a/test/dart2js/unminified_in_nonrelease_mode_test.dart
+++ b/test/dart2js/unminified_in_nonrelease_mode_test.dart
@@ -15,7 +15,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["--mode", "whatever"]);
+    pubServe(args: ["--mode", "whatever"], shouldGetFirst: true);
     requestShouldSucceed("main.dart.js", isUnminifiedDart2JSOutput);
     endPubServe();
   });
diff --git a/test/global/activate/activate_path_after_hosted_test.dart b/test/global/activate/activate_path_after_hosted_test.dart
index 1f37910931ce318f15d712918a88b06a4c2afc45..318e45b212b9d8e8c7221844541184a48411822d 100644
--- a/test/global/activate/activate_path_after_hosted_test.dart
+++ b/test/global/activate/activate_path_after_hosted_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:path/path.dart' as p;
 import 'package:pub/src/io.dart';
+import 'package:scheduled_test/scheduled_test.dart';
 
 import '../../descriptor.dart' as d;
 import '../../test_pub.dart';
@@ -28,9 +29,12 @@ main() {
     schedulePub(args: ["global", "activate", "foo"]);
 
     var path = canonicalize(p.join(sandboxDir, "foo"));
-    schedulePub(args: ["global", "activate", "-spath", "../foo"], output: """
-        Package foo is currently active at version 1.0.0.
-        Activated foo 2.0.0 at path "$path".""");
+    schedulePub(
+        args: ["global", "activate", "-spath", "../foo"],
+        output: allOf([
+          contains("Package foo is currently active at version 1.0.0."),
+          contains('Activated foo 2.0.0 at path "$path".')
+        ]));
 
     // Should now run the path one.
     var pub = pubRun(global: true, args: ["foo"]);
diff --git a/test/global/activate/path_package_test.dart b/test/global/activate/path_package_test.dart
index 83c8dc7750267ae1c4169eef6be2072e60b43a73..37bfc1b284422d498247e75d4202e8b503b4c3c1 100644
--- a/test/global/activate/path_package_test.dart
+++ b/test/global/activate/path_package_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:path/path.dart' as p;
 import 'package:pub/src/io.dart';
+import 'package:scheduled_test/scheduled_test.dart';
 
 import '../../descriptor.dart' as d;
 import '../../test_pub.dart';
@@ -19,6 +20,6 @@ main() {
 
     var path = canonicalize(p.join(sandboxDir, "foo"));
     schedulePub(args: ["global", "activate", "--source", "path", "../foo"],
-        output: 'Activated foo 1.0.0 at path "$path".');
+        output: endsWith('Activated foo 1.0.0 at path "$path".'));
   });
 }
diff --git a/test/serve/404_page_test.dart b/test/serve/404_page_test.dart
index fe5fcc9f07ab40e1b050314a7727e590de284097..3b478bcc837fe8fed1a6fa95e94f81c9aeea9c5b 100644
--- a/test/serve/404_page_test.dart
+++ b/test/serve/404_page_test.dart
@@ -18,7 +18,7 @@ main() {
   });
 
   integration("the 404 page describes the missing asset", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     scheduleRequest("packages/foo/missing.txt").then((response) {
       expect(response.statusCode, equals(404));
@@ -32,7 +32,7 @@ main() {
   });
 
   integration("the 404 page describes the error", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     scheduleRequest("packages").then((response) {
       expect(response.statusCode, equals(404));
diff --git a/test/serve/does_not_serve_hidden_assets_test.dart b/test/serve/does_not_serve_hidden_assets_test.dart
index ab7404f4b129d2d0aeb91aa814d98afdd3764c91..6cab6b745679a6b84c71b9a8877e52111385f3f0 100644
--- a/test/serve/does_not_serve_hidden_assets_test.dart
+++ b/test/serve/does_not_serve_hidden_assets_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShould404(".outer.txt");
     requestShould404(".dir/inner.txt");
     endPubServe();
diff --git a/test/serve/does_not_watch_compiled_js_files_test.dart b/test/serve/does_not_watch_compiled_js_files_test.dart
index 94be82026fb7e33b57f48ab47de1f15df67b2b53..0a5e70d6af1a1e2823c2b62ee1de7c1db47e3a71 100644
--- a/test/serve/does_not_watch_compiled_js_files_test.dart
+++ b/test/serve/does_not_watch_compiled_js_files_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     waitForBuildSuccess();
     requestShouldSucceed("index.html", "body");
 
diff --git a/test/serve/invalid_method_test.dart b/test/serve/invalid_method_test.dart
index 95a8eafc0d2f8296e98608a2c5ddb204fb5bd710..f384c9738af31bf9b835730adbf1cc8831fbbc9d 100644
--- a/test/serve/invalid_method_test.dart
+++ b/test/serve/invalid_method_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     postShould405("index.html");
     endPubServe();
diff --git a/test/serve/missing_asset_test.dart b/test/serve/missing_asset_test.dart
index 42753b609803e1880006c87f1a326a0c22aa46d5..30a54c18d6234f2618004957cbf9c49c3dc16834 100644
--- a/test/serve/missing_asset_test.dart
+++ b/test/serve/missing_asset_test.dart
@@ -14,7 +14,7 @@ main() {
       d.appPubspec()
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShould404("index.html");
     requestShould404("packages/myapp/nope.dart");
     requestShould404("dir/packages/myapp/nope.dart");
diff --git a/test/serve/missing_file_test.dart b/test/serve/missing_file_test.dart
index 1596dff5090a61888aeec27abd0fe2bd02d1d2a8..2cd36b50439840c89638c689c1bfb4d1a014c29e 100644
--- a/test/serve/missing_file_test.dart
+++ b/test/serve/missing_file_test.dart
@@ -26,7 +26,7 @@ main() {
 
     // Start the server with the files present so that it creates barback
     // assets for them.
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     // Now delete them.
     schedule(() {
diff --git a/test/serve/native_watch_added_file_test.dart b/test/serve/native_watch_added_file_test.dart
index 641917f4f8855be4c5a66656f2bb2bc4b3f8b40e..a2a4ad94c499621ae8263bb294927f628186b9a4 100644
--- a/test/serve/native_watch_added_file_test.dart
+++ b/test/serve/native_watch_added_file_test.dart
@@ -21,7 +21,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["--no-force-poll"]);
+    pubServe(args: ["--no-force-poll"], shouldGetFirst: true);
     waitForBuildSuccess();
     requestShouldSucceed("index.html", "body");
 
diff --git a/test/serve/native_watch_modified_file_test.dart b/test/serve/native_watch_modified_file_test.dart
index 9e3dbd0a14d11c669834f6ccb866f80d3c7706f4..0eb1f288b44b5ea58aa3c5f16cdce64dd5bb5175 100644
--- a/test/serve/native_watch_modified_file_test.dart
+++ b/test/serve/native_watch_modified_file_test.dart
@@ -21,7 +21,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["--no-force-poll"]);
+    pubServe(args: ["--no-force-poll"], shouldGetFirst: true);
     requestShouldSucceed("index.html", "before");
 
     d.dir(appPath, [
diff --git a/test/serve/native_watch_removed_file_test.dart b/test/serve/native_watch_removed_file_test.dart
index 17295675ef37d6dae476f5372244542308857c09..35dd02a87b3d47b5f03f0ee66c5d5a798d848d92 100644
--- a/test/serve/native_watch_removed_file_test.dart
+++ b/test/serve/native_watch_removed_file_test.dart
@@ -25,7 +25,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["--no-force-poll"]);
+    pubServe(args: ["--no-force-poll"], shouldGetFirst: true);
     requestShouldSucceed("index.html", "body");
 
     schedule(() => deleteEntry(
diff --git a/test/serve/serve_from_app_lib_test.dart b/test/serve/serve_from_app_lib_test.dart
index 89b65ca465f61f5d1cdbbb8d74ae6c2a53a73af6..68abeaa7169152f57a121c3e1700353a9dec0d93 100644
--- a/test/serve/serve_from_app_lib_test.dart
+++ b/test/serve/serve_from_app_lib_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("packages/myapp/lib.dart", "foo() => 'foo';");
     requestShouldSucceed("packages/myapp/sub/lib.dart", "bar() => 'bar';");
 
diff --git a/test/serve/serve_from_app_web_test.dart b/test/serve/serve_from_app_web_test.dart
index 96363d97e2880bd5b089528b7514ae343f0e816a..6c09a779cbcefd9883db1130fc7e492c82985b38 100644
--- a/test/serve/serve_from_app_web_test.dart
+++ b/test/serve/serve_from_app_web_test.dart
@@ -22,7 +22,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("index.html", "<body>");
     requestShouldSucceed("file.dart", "main() => print('hello');");
     requestShouldSucceed("sub/file.html", "<body>in subdir</body>");
diff --git a/test/serve/serves_file_with_space_test.dart b/test/serve/serves_file_with_space_test.dart
index b65ce8a38047152fae819b519240bbd90a5e3dcd..abc4e04a61f878e7b77e1ffaa7952b04229f7157 100644
--- a/test/serve/serves_file_with_space_test.dart
+++ b/test/serve/serves_file_with_space_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("foo%20bar.txt", "outer contents");
     requestShouldSucceed("sub%20dir/inner.txt", "inner contents");
     endPubServe();
diff --git a/test/serve/serves_index_html_for_directories_test.dart b/test/serve/serves_index_html_for_directories_test.dart
index 90c87e42f6c2b79e51eada315aef226478bbbf60..e000e1ec0312a82b1c9d66aaa91d491c356057e2 100644
--- a/test/serve/serves_index_html_for_directories_test.dart
+++ b/test/serve/serves_index_html_for_directories_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("", "<body>super");
     requestShouldSucceed("sub/", "<body>sub");
     requestShouldRedirect("sub", "/sub/");
diff --git a/test/serve/serves_web_and_test_dirs_by_default_test.dart b/test/serve/serves_web_and_test_dirs_by_default_test.dart
index 7367511a482a65f1c9cddad79a271e930ca022a2..6a5b49519feb5607edd49412c7b9877c9783f681 100644
--- a/test/serve/serves_web_and_test_dirs_by_default_test.dart
+++ b/test/serve/serves_web_and_test_dirs_by_default_test.dart
@@ -17,7 +17,7 @@ main() {
       d.dir("example", [d.file("baz", "contents")])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("foo", "contents", root: "web");
     requestShouldSucceed("bar", "contents", root: "test");
     requestShould404("baz", root: "web");
diff --git a/test/serve/supports_cross_origin_header_test.dart b/test/serve/supports_cross_origin_header_test.dart
index 96a088824ee43e96921df1cceac712e7b8200a4b..fbe54d7f31f8887fce8458a5f598761c76f11568 100644
--- a/test/serve/supports_cross_origin_header_test.dart
+++ b/test/serve/supports_cross_origin_header_test.dart
@@ -17,7 +17,7 @@ main() {
       d.dir("web", [d.file("index.html", "<body>")])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("index.html", "<body>",
         headers: containsPair("access-control-allow-origin", "*"));
     endPubServe();
diff --git a/test/serve/unknown_dependency_test.dart b/test/serve/unknown_dependency_test.dart
index ed7f70f1e2bac9bd681b2af1439348af87932afc..b7e9c6b004f083757570a3ddf22159de2f8671e6 100644
--- a/test/serve/unknown_dependency_test.dart
+++ b/test/serve/unknown_dependency_test.dart
@@ -14,7 +14,7 @@ main() {
       d.appPubspec()
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShould404("packages/foo/nope.dart");
     requestShould404("assets/foo/nope.png");
     requestShould404("dir/packages/foo/nope.dart");
diff --git a/test/serve/uses_appropriate_mime_types_test.dart b/test/serve/uses_appropriate_mime_types_test.dart
index 265f388293b2a82bb491c4fe0b721d3667bc1d96..534fe89107770350e1e2594fb773a2cd3df7284a 100644
--- a/test/serve/uses_appropriate_mime_types_test.dart
+++ b/test/serve/uses_appropriate_mime_types_test.dart
@@ -22,7 +22,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("index.html", anything,
         headers: containsPair('content-type', 'text/html'));
     requestShouldSucceed("file.dart", anything,
diff --git a/test/serve/watch_added_file_test.dart b/test/serve/watch_added_file_test.dart
index b405bd683d8d9bd92731bff239bbf772eaedba11..9fafa62ce513a9e6cba85c10654b65bc0666217b 100644
--- a/test/serve/watch_added_file_test.dart
+++ b/test/serve/watch_added_file_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     waitForBuildSuccess();
     requestShouldSucceed("index.html", "body");
 
diff --git a/test/serve/watch_modified_file_test.dart b/test/serve/watch_modified_file_test.dart
index dc878a03fcc15182065b5835889d7c638364cbca..9fb0c31842c48bfe035de1697657c064b5922c7f 100644
--- a/test/serve/watch_modified_file_test.dart
+++ b/test/serve/watch_modified_file_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("index.html", "before");
 
     d.dir(appPath, [
diff --git a/test/serve/watch_removed_file_test.dart b/test/serve/watch_removed_file_test.dart
index 45d7c51fcb8246c1ae5233d7b6d06c285578b25f..fffa86f82c0c74a38a1b310e2e3d4dbc25b915e0 100644
--- a/test/serve/watch_removed_file_test.dart
+++ b/test/serve/watch_removed_file_test.dart
@@ -21,7 +21,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
     requestShouldSucceed("index.html", "body");
 
     schedule(() => deleteEntry(
diff --git a/test/serve/web_socket/exit_on_close_test.dart b/test/serve/web_socket/exit_on_close_test.dart
index f32bbbd04a82af9195413f5359efb600e703754c..2dc0a381526279e2dcc2a23f103b31fd22cd36c5 100644
--- a/test/serve/web_socket/exit_on_close_test.dart
+++ b/test/serve/web_socket/exit_on_close_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    var server = pubServe();
+    var server = pubServe(shouldGetFirst: true);
 
     // Make sure the web socket is active.
     expectWebSocketResult("urlToAssetId", {
diff --git a/test/serve/web_socket/path_to_urls_with_line_test.dart b/test/serve/web_socket/path_to_urls_with_line_test.dart
index b3f07764fc3dc0d28a48d1bbee509bbd39c18179..2de45e9949212f8c8326af215be6e8aa083ef5f5 100644
--- a/test/serve/web_socket/path_to_urls_with_line_test.dart
+++ b/test/serve/web_socket/path_to_urls_with_line_test.dart
@@ -19,7 +19,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     expectWebSocketResult("pathToUrls", {
       "path": p.join("web", "main.dart"),
diff --git a/test/serve/web_socket/serve_directory_already_served_test.dart b/test/serve/web_socket/serve_directory_already_served_test.dart
index 84a5b7be190d9a74888f3b792dca48f319112c52..b472a3b8c160436637d133a8c37145e6dd1f51ac 100644
--- a/test/serve/web_socket/serve_directory_already_served_test.dart
+++ b/test/serve/web_socket/serve_directory_already_served_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     expectWebSocketResult("serveDirectory", {"path": "web"}, {
       "url": getServerUrl("web")
diff --git a/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart b/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart
index 27bc8b6d09d376b3a0e3102d8e128369ad0972e5..87af20d1114825fd18ffe4b7770b7ebb407b3b6b 100644
--- a/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart
+++ b/test/serve/web_socket/serve_directory_and_immediately_request_asset_test.dart
@@ -23,7 +23,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["web"]);
+    pubServe(args: ["web"], shouldGetFirst: true);
 
     // Bind the new directory.
     expect(webSocketRequest("serveDirectory", {"path": "test"}), completes);
diff --git a/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart b/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart
index 96c4ddc9480d846639e390ac95ef3c7e0b246821..5ac8f58c834e1284e656d5a12ec5e1973c268b05 100644
--- a/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart
+++ b/test/serve/web_socket/serve_directory_and_immediately_serve_again_test.dart
@@ -25,7 +25,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["web"]);
+    pubServe(args: ["web"], shouldGetFirst: true);
 
     schedule(() {
       return Future.wait([
diff --git a/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart b/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart
index b73c3c833f54f6749d0efa203f97f02ba741bffb..2e263faf5670ecb32ce2434b2d3e662a10bfedba 100644
--- a/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart
+++ b/test/serve/web_socket/serve_directory_and_immediately_unserve_test.dart
@@ -25,7 +25,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["web"]);
+    pubServe(args: ["web"], shouldGetFirst: true);
 
     // We call [webSocketRequest] outside of the [schedule] call below because
     // we need it to schedule the sending of the request to guarantee that the
diff --git a/test/serve/web_socket/serve_directory_arg_errors_test.dart b/test/serve/web_socket/serve_directory_arg_errors_test.dart
index 5bd298ebe510259f8f21c755d60981d2225fb9db..458a5ade024cad48a3eb895ae0f7ce0d504a196b 100644
--- a/test/serve/web_socket/serve_directory_arg_errors_test.dart
+++ b/test/serve/web_socket/serve_directory_arg_errors_test.dart
@@ -22,7 +22,7 @@ main() {
   });
 
   integration("responds with an error if 'path' is not a string", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("serveDirectory", {"path": 123},
         rpc_error_code.INVALID_PARAMS,
         'Parameter "path" for method "serveDirectory" must be a string, but '
@@ -31,7 +31,7 @@ main() {
   });
 
   integration("responds with an error if 'path' is absolute", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("serveDirectory", {"path": "/absolute.txt"},
         rpc_error_code.INVALID_PARAMS,
         '"path" must be a relative path. Got "/absolute.txt".');
@@ -39,7 +39,7 @@ main() {
   });
 
   integration("responds with an error if 'path' reaches out", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("serveDirectory", {"path": "a/../../bad.txt"},
         rpc_error_code.INVALID_PARAMS,
         '"path" cannot reach out of its containing directory. Got '
diff --git a/test/serve/web_socket/serve_directory_overlapping_test.dart b/test/serve/web_socket/serve_directory_overlapping_test.dart
index 00c7ec601c078709482c8a0afb737b5faf48eda6..320350712fe2edde8f453f997886635eaa568e5f 100644
--- a/test/serve/web_socket/serve_directory_overlapping_test.dart
+++ b/test/serve/web_socket/serve_directory_overlapping_test.dart
@@ -23,7 +23,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     var webSub = path.join("web", "sub");
     expectWebSocketError("serveDirectory", {"path": webSub}, 2,
diff --git a/test/serve/web_socket/serve_directory_test.dart b/test/serve/web_socket/serve_directory_test.dart
index bc48072cfa472eb90899ee466351d0d7efbdba7a..70f20ca30486a248b6ee6d5ed7ce6319cc52c3ad 100644
--- a/test/serve/web_socket/serve_directory_test.dart
+++ b/test/serve/web_socket/serve_directory_test.dart
@@ -22,7 +22,7 @@ main() {
       ])
     ]).create();
 
-    pubServe(args: ["web"]);
+    pubServe(args: ["web"], shouldGetFirst: true);
 
     // Bind the new directory.
     schedule(() async {
diff --git a/test/serve/web_socket/unserve_directory_arg_errors_test.dart b/test/serve/web_socket/unserve_directory_arg_errors_test.dart
index 265df168667fd7d1df89e58ad1a4864069c60d1b..cddb964324d7410911c61ea8bf026165eb3412b8 100644
--- a/test/serve/web_socket/unserve_directory_arg_errors_test.dart
+++ b/test/serve/web_socket/unserve_directory_arg_errors_test.dart
@@ -22,7 +22,7 @@ main() {
   });
 
   integration("responds with an error if 'path' is not a string", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("unserveDirectory", {"path": 123},
         rpc_error_code.INVALID_PARAMS,
         'Parameter "path" for method "unserveDirectory" must be a string, but '
@@ -31,7 +31,7 @@ main() {
   });
 
   integration("responds with an error if 'path' is absolute", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("unserveDirectory", {"path": "/absolute.txt"},
         rpc_error_code.INVALID_PARAMS,
         '"path" must be a relative path. Got "/absolute.txt".');
@@ -39,7 +39,7 @@ main() {
   });
 
   integration("responds with an error if 'path' reaches out", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("unserveDirectory", {"path": "a/../../bad.txt"},
         rpc_error_code.INVALID_PARAMS,
         '"path" cannot reach out of its containing directory. Got '
diff --git a/test/serve/web_socket/unserve_directory_not_served_test.dart b/test/serve/web_socket/unserve_directory_not_served_test.dart
index 4ca5753353e329314421e781d09de89586dce7ca..2c418187d3df7e5aaf6dec89817fedd5824426e0 100644
--- a/test/serve/web_socket/unserve_directory_not_served_test.dart
+++ b/test/serve/web_socket/unserve_directory_not_served_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     // Unbind the directory.
     expectWebSocketError("unserveDirectory", {"path": "test"}, NOT_SERVED,
diff --git a/test/serve/web_socket/unserve_directory_test.dart b/test/serve/web_socket/unserve_directory_test.dart
index b4bf97a592ca21405ceb0571a3a975abfad345c6..acd2f5da6fc6bcce296e364c0de69a10c37966f0 100644
--- a/test/serve/web_socket/unserve_directory_test.dart
+++ b/test/serve/web_socket/unserve_directory_test.dart
@@ -20,7 +20,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     requestShouldSucceed("index.html", "<body>");
     requestShouldSucceed("index.html", "<test body>", root: "test");
diff --git a/test/serve/web_socket/url_to_asset_id_errors_test.dart b/test/serve/web_socket/url_to_asset_id_errors_test.dart
index c3cfa91126662631fa7c2f16900ad36c4623c1f5..10a603390bc7d5bf67236fc540ff9c8e051482ad 100644
--- a/test/serve/web_socket/url_to_asset_id_errors_test.dart
+++ b/test/serve/web_socket/url_to_asset_id_errors_test.dart
@@ -18,7 +18,7 @@ main() {
   });
 
   integration("responds with NOT_SERVED for an unknown domain", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("urlToAssetId", {
       "url": "http://example.com:80/index.html"
     }, NOT_SERVED, '"example.com:80" is not being served by pub.');
@@ -26,7 +26,7 @@ main() {
   });
 
   integration("responds with NOT_SERVED for an unknown port", () {
-    pubServe();
+    pubServe(shouldGetFirst: true);
     expectWebSocketError("urlToAssetId", {
       "url": "http://localhost:80/index.html"
     }, NOT_SERVED, '"localhost:80" is not being served by pub.');
diff --git a/test/serve/web_socket/url_to_asset_id_with_line_test.dart b/test/serve/web_socket/url_to_asset_id_with_line_test.dart
index e83efe5fc71b7a6294b8be4ac511fbd6f571b1d5..ca0b915282bf77ea25ddcd63a7ac06abce3a6c6d 100644
--- a/test/serve/web_socket/url_to_asset_id_with_line_test.dart
+++ b/test/serve/web_socket/url_to_asset_id_with_line_test.dart
@@ -17,7 +17,7 @@ main() {
       ])
     ]).create();
 
-    pubServe();
+    pubServe(shouldGetFirst: true);
 
     // Paths in web/.
     expectWebSocketResult("urlToAssetId", {