         grandchild (add-fork child (fn [e] (async/put! os (str "[grandchild] " e))))]
     (testing "triggering"
       (trigger bus "event")
-      (is (= (sort ["[grandchild] event" "[child] event" "[parent] event"])
-             (sort (take-all! os)))))
+      (is (matches? ["[grandchild] event" "[child] event" "[parent] event"]
+                    (take-all! os))))
 
     (testing "shutdown"
       (shutdown child)
       (trigger bus "event")
-      (is (= (sort ["[parent] event"])
-             (sort (take-all! os)))))))
+      (is (matches? ["[parent] event"]
+                    (take-all! os))))))
 
 (deftest event-handler
   (let [parent (event-bus (upstream-router))


    (testing "triggering"
      (trigger grandchild "event")
      (is (= (sort ["[child] event" "[parent] event"])
             (sort (take-all! os)))))
    (testing "shutdown"
      (shutdown parent)
      (trigger grandchild "event")

            child (add-leg parent (add-info " (pass child)"))
            grandchild (add-fork child (fn [e] (async/put! os (str "[grandchild] " e))) (add-info " (pass grandchild)"))]
        (trigger bottom "event")
        (is (matches? ["[grandchild] event (pass parent) (pass child)"]
                      (take-all! os)))))))

; TODO: Attempt to use in core (downstream only).
; TODO: Move descriptor-related code to om-event-bus.descriptor.
; TODO: Use upstream in core.
