                               :on-dispose #(reset! disposed-c true))
           res (rv/atom nil)
           cns (rv/make-reaction #(reset! res @c)
-                                :auto-run true
+                                :auto-run :async
                                 :on-dispose #(reset! disposed-cns true))]
-      @cns
+      (sync)
       (is (= @res 2))
       (is (= (+ 4 runs) (running)))
       (is (= @count-b 1))
       (reset! a -1)
+      (is (= @res 2))
+      (sync)
       (is (= @res 1))
       (is (= @disposed nil))
       (is (= @count-b 2))
       (is (= (+ 4 runs) (running)) "still running")
       (reset! a 2)
+      (sync)
       (is (= @res 1))
       (is (= @disposed true))
       (is (= (+ 2 runs) (running)) "less running count")
 
       (reset! disposed nil)
       (reset! a -1)
+      (sync)
       ;; This fails sometimes on node. I have no idea why.
       (is (= 1 @res) "should be one again")
       (is (= @disposed nil))
       (reset! a 2)
+      (sync)
       (is (= @res 1))
       (is (= @disposed true))
       (dispose cns)

          c (reaction (dec @a))
          d (reaction (str @b))
          res (rv/atom 0)
          cs (run!
              (reset! res @d))]
      (is (= @res "1"))
      (dispose cs))
    ;; should be broken according to https://github.com/lynaghk/reflex/issues/1

    (is (= (running) runs))))

(deftest test-from-reflex
  (sync)
  (let [runs (running)]
    (let [!counter (rv/atom 0)
          !signal (rv/atom "All I do is change")
          co (ar (fn []
                   ;;when I change...
                   @!signal
                   ;;update the counter
                   (swap! !counter inc)))]
      (is (= 0 @!counter))
      (sync)
      (is (= 1 @!counter) "Constraint run on init")
      (reset! !signal "foo")
      (sync)
      (is (= 2 @!counter)
          "Counter auto updated")
      (dispose co))
    (let [!x (rv/atom 0)
          !co (rv/make-reaction #(inc @!x) :auto-run :async)]
      (sync)
      (is (= 1 @!co) "CO has correct value on first deref") 
      (swap! !x inc)
      (sync)
      (is (= 2 @!co) "CO auto-updates")
      (dispose !co))
    (is (= runs (running)))))


(deftest test-unsubscribe
  (sync)
  (dotimes [x testite]
    (let [runs (running)
          a (rv/atom 0)
