diff --git a/lib/spack/spack/cmd/spec.py b/lib/spack/spack/cmd/spec.py
index 86e01e329486ae463a801cba64262bbaffe31002..d677596b6b60cf520fd4384643f3467513f7fb6e 100644
--- a/lib/spack/spack/cmd/spec.py
+++ b/lib/spack/spack/cmd/spec.py
@@ -71,6 +71,12 @@ def setup_parser(subparser):
     subparser.add_argument(
         "-t", "--types", action="store_true", default=False, help="show dependency types"
     )
+    subparser.add_argument(
+        "--test",
+        default=None,
+        choices=["root", "all"],
+        help="concretize with test dependencies of only root packages or all packages",
+    )
     arguments.add_common_arguments(subparser, ["specs"])
     arguments.add_concretizer_args(subparser)
 
@@ -91,8 +97,16 @@ def spec(parser, args):
     env = ev.active_environment()
 
     if args.specs:
-        concrete_specs = spack.cmd.parse_specs(args.specs, concretize=True)
+        if args.test == "all":
+            tests = True
+        elif args.test == "root":
+            tests = [spec.name for spec in spack.cmd.parse_specs(args.specs)]
+        else:
+            tests = False
+        concrete_specs = spack.cmd.parse_specs(args.specs, concretize=True, tests=tests)
     elif env:
+        if args.test is not None:
+            tty.die("spack spec for environments does not support test dependency selection")
         env.concretize()
         concrete_specs = env.concrete_roots()
     else: