diff --git a/core/modules/migrate/src/Entity/Migration.php b/core/modules/migrate/src/Entity/Migration.php
index c287e1f..620ef84 100644
--- a/core/modules/migrate/src/Entity/Migration.php
+++ b/core/modules/migrate/src/Entity/Migration.php
@@ -424,7 +424,9 @@ public function getMigrationResult() {
    * {@inheritdoc}
    */
   public function isComplete() {
-    return $this->getMigrationResult() === static::RESULT_COMPLETED;
+    // <= because sometimes data may be deleted from a source, or unresolved
+    // stubs may inflate the processed count.
+    return $this->getSourcePlugin()->count() <= $this->getIdMap()->processedCount();
   }
 
   /**
diff --git a/core/modules/migrate/src/Tests/MigrateTestBase.php b/core/modules/migrate/src/Tests/MigrateTestBase.php
index 67210f7..b30db4a 100644
--- a/core/modules/migrate/src/Tests/MigrateTestBase.php
+++ b/core/modules/migrate/src/Tests/MigrateTestBase.php
@@ -121,9 +121,6 @@ protected function prepareMigrations(array $id_mappings) {
     foreach ($id_mappings as $migration_id => $data) {
       $migration = $migrations[$migration_id];
 
-      // Mark the dependent migrations as complete.
-      $migration->setMigrationResult(MigrationInterface::RESULT_COMPLETED);
-
       $id_map = $migration->getIdMap();
       $id_map->setMessage($this);
       $source_ids = $migration->getSourcePlugin()->getIds();
