 
 (defspec this-is-supposed-to-fail 100 vector-elements-are-unique)
 
-(defn- capture-test-var
+(defspec this-throws-an-exception
+  (prop/for-all [x gen/nat]
+    (throw (ex-info "this property is terrible" {}))))
+
+(defn ^:private capture-test-var
+  "Returns [report-counters out-str]."
   [v]
-  (with-out-str #?(:clj  (binding [*test-out* *out*] (test-var v))
-                   :cljs (test-var v))))
+  #?(:clj
+     (binding [*report-counters* (ref *initial-report-counters*)]
+       (let [out (with-out-str (binding [*test-out* *out*] (test-var v)))]
+         [@*report-counters* out]))
+
+     :cljs
+     (let [restore-env    (test/get-current-env)
+           _              (test/set-env! (test/empty-env))
+           out            (with-out-str (test-var v))
+           env            (test/get-current-env)]
+       (test/set-env! restore-env)
+       [(:report-counters env) out])))
 
 (defn ^:private capture-clojure-test-reports
   [func]

            :cljs
            #"Shrinking vector-elements-are-unique starting with parameters \[\[[\s\S]+")
         stdout)))

  ;;
  ;; Test for TCHECK-118

          "calling with other :type keeps last-trial-report constant")
      (is (re-seq
           #"(Passing trial \d{3} / 1000 for .+\n)+"
           (second
            (capture-test-var #'long-running-spec))))
      (is (> @last-trial-report trial-report-1)
          "running the test makes last-trial-report to increment")))

  (let [[report-counters stdout]
        (binding [ct/*report-shrinking* true]
          (capture-test-var #'this-is-supposed-to-fail))]
    (is (== 1 (:fail report-counters)))
    (is (re-seq
         #?(:clj
