diff --git a/scripts/west_commands/build.py b/scripts/west_commands/build.py
index 0c62213..0063173 100644
--- a/scripts/west_commands/build.py
+++ b/scripts/west_commands/build.py
@@ -156,7 +156,8 @@
         self._parse_remainder(remainder)
         # Parse testcase.yaml or sample.yaml files for additional options.
         if self.args.test_item:
-            self._parse_test_item()
+            if not self._parse_test_item():
+                log.die("No test metadata found")
         if source_dir:
             if self.args.source_dir:
                 log.die("source directory specified twice:({} and {})".format(
@@ -246,10 +247,12 @@
             return
 
     def _parse_test_item(self):
+        found_test_metadata = False
         for yp in ['sample.yaml', 'testcase.yaml']:
             yf = os.path.join(self.args.source_dir, yp)
             if not os.path.exists(yf):
                 continue
+            found_test_metadata = True
             with open(yf, 'r') as stream:
                 try:
                     y = yaml.safe_load(stream)
@@ -257,10 +260,10 @@
                     log.die(exc)
             tests = y.get('tests')
             if not tests:
-                continue
+                log.die(f"No tests found in {yf}")
             item = tests.get(self.args.test_item)
             if not item:
-                continue
+                log.die(f"Test item {self.args.test_item} not found in {yf}")
 
             for data in ['extra_args', 'extra_configs']:
                 extra = item.get(data)
@@ -275,6 +278,7 @@
                     self.args.cmake_opts.extend(args)
                 else:
                     self.args.cmake_opts = args
+        return found_test_metadata
 
     def _sanity_precheck(self):
         app = self.args.source_dir
