             ;; ‘load-suffixes’ temporarily to its original value.
             (let ((load-suffixes original-load-suffixes))
               (elisp/ert/log--error name
-                                    (format-message "Test %s %s" name status))))
+                                    (format-message "Test %s %s" name status)))
+            (and fail-fast (setq tests nil)))
           (and failed (cl-incf failures))
           (and (not expected) (not failed) (cl-incf errors))
           (when (ert-test-skipped-p result)

                             collect test))
        (or tests (message "Empty shard with index %d" shard-index)))
      (message "Running %d tests" (length tests))
      (dolist (test tests)
        (message "Running test %s" (ert-test-name test))
        (let* ((name (ert-test-name test))
               (start-time (current-time))
               (result (ert-run-test test))
               (duration (time-subtract nil start-time))

               (report nil))
          (message "Test %s %s and took %d ms" name status
                   (* (float-time duration) 1000))
          (cl-incf total)
          (unless expected
            (cl-incf unexpected)
            ;; Print a nice error message that should point back to the source
