diff --git a/package_manager/src/Stage.php b/package_manager/src/Stage.php
index abaa72ef42b1cfc5c15032a3072641140d07bc83..6548db10cf65b6addb8f6a034aa38ec1273394fb 100644
--- a/package_manager/src/Stage.php
+++ b/package_manager/src/Stage.php
@@ -435,7 +435,7 @@ class Stage {
    *
    * @todo Make this method public in https://www.drupal.org/i/3251972.
    */
-  protected function getStageDirectory(): string {
+  public function getStageDirectory(): string {
     if (!$this->lock) {
       throw new \LogicException(__METHOD__ . '() cannot be called because the stage has not been created or claimed.');
     }
diff --git a/package_manager/tests/src/Kernel/StageTest.php b/package_manager/tests/src/Kernel/StageTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0ed5f56049ab936218670b10af52aa2ec41e2e3c
--- /dev/null
+++ b/package_manager/tests/src/Kernel/StageTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\Tests\package_manager\Kernel;
+
+/**
+ * @coversDefaultClass \Drupal\package_manager\Stage
+ *
+ * @group package_manager
+ */
+class StageTest extends PackageManagerKernelTestBase {
+
+  /**
+   * @covers ::getStageDirectory
+   */
+  public function testGetStageDirectory(): void {
+    $stage = $this->createStage();
+    $id = $stage->create();
+    $this->assertStringEndsWith("/.package_manager/$id", $stage->getStageDirectory());
+  }
+
+  /**
+   * @covers ::getStageDirectory
+   */
+  public function testUncreatedGetStageDirectory(): void {
+    $this->expectException('LogicException');
+    $this->expectExceptionMessage('Drupal\package_manager\Stage::getStageDirectory() cannot be called because the stage has not been created or claimed.');
+    $this->createStage()->getStageDirectory();
+  }
+
+}