diff --git a/src/cli.js b/src/cli.js
index <HASH>..<HASH> 100644
--- a/src/cli.js
+++ b/src/cli.js
@@ -72,9 +72,18 @@ async function main() {
     // We need to polyfill it for the server side.
     const channel = new EventEmitter();
     addons.setChannel(channel);
-    await runner.run(filterStorybook(storybook, grep, exclude));
+    const result = await runner.run(filterStorybook(storybook, grep, exclude));
+    const fails = result.errored + result.unmatched;
+    const exitCode = fails > 0 ? 1: 0;
+    if(!program.watch){
+      process.exit(exitCode);
+    }
   } catch (e) {
-    console.log(e.stack);
+    console.log(e.stack || e);
+
+    if(!program.watch){
+      process.exit(1);
+    }
   }
 }
 
diff --git a/src/test_runner/index.js b/src/test_runner/index.js
index <HASH>..<HASH> 100644
--- a/src/test_runner/index.js
+++ b/src/test_runner/index.js
@@ -125,5 +125,6 @@ export default class Runner {
     }
 
     this.end();
+    return this.testState;
   }
 }
Exit with exit code 1 if some tests errored or unmatched