         listener2Args = [a,b,c]
         expect(listener1Called).toBeTruthy()
         expect(listener1Args).toEqual(listener2Args)
-        done()
+        ended = true
 
       signal = new Signal
 
       signal.add listener1
       signal.add listener2
 
-      signal.dispatch(1,2,3)
+      runs ->
+        signal.dispatch(1,2,3)
+
+      waitsFor progress(-> ended), 'Signal timed out', 1000
 
     it 'should call back the passed-in function
-        at the end of the dispatch'.squeeze(), (done) ->
-
+        at the end of the dispatch'.squeeze(), ->
+
+      ended = false
       listener1 = (a, b, c, callback) -> setTimeout (-> callback()), 100
       listener2 = (a, b, c, callback) -> setTimeout (-> callback()), 100
 

  describe 'with an asynchronous listener', ->

    it 'should wait until the callback was called
        before doing to the next listener'.squeeze(), (done) ->

      listener1Called = false
      listener1Args = null

      ended = false

      listener1 = (a,b,c,callback) ->
        setTimeout ->
          listener1Args = [a,b,c]
          listener1Called = true
