         @sut.subscribe 'apple', ['received'], ['-p*r*'], done
 
       describe 'when given a matching string', ->
-        beforeEach (done) ->
+        beforeEach ->
           message = devices: ['apple'], topic: 'pears', payload: 'hi'
-          @redis.publish 'test:received:apple', JSON.stringify(message), done
+          @redis.publish 'test:received:apple', JSON.stringify(message)
+
+        beforeEach (done) ->
+          setTimeout done, 100
 
         it 'should not emit the message', ->
           expect(@onMessage).not.to.have.been.called
 
       describe 'when given a non-matching string', ->
-        beforeEach (done) ->
+        beforeEach ->
           message = devices: ['apple'], topic: 'paer', payload: 'hi'
-          @redis.publish 'test:received:apple', JSON.stringify(message), done
+          @redis.publish 'test:received:apple', JSON.stringify(message)
+
+        beforeEach (done) ->
+          setTimeout done, 100
 
         it 'should not emit the message', ->
           expect(@onMessage).not.to.have.been.called
 
       describe 'when given a non-matching string', ->
         beforeEach (done) ->
+          @sut.once 'message', => done()
           message = devices: ['apple'], topic: 'dear', payload: 'hi'
-          @redis.publish 'test:received:apple', JSON.stringify(message), done
+          @redis.publish 'test:received:apple', JSON.stringify(message)
 
         it 'should emit the message', ->
           expect(@onMessage).to.have.been.called

        @sut.once 'message', @onMessage
        @sut.subscribe 'hubris', ['broadcast'], undefined, =>
          @sut.unsubscribe 'hubris', ['broadcast'], =>
            @redis.publish 'test:broadcast:hubris', JSON.stringify(that: 'would never happen to me!'), =>
              done()

      it 'should not get a message', ->
        expect(@onMessage).not.to.have.been.called


      describe 'when given the same string', ->
        beforeEach (done) ->
          @sut.once 'message', => done()
          message = devices: ['apple'], topic: 'pear', payload: 'hi'
          @redis.publish 'test:received:apple', JSON.stringify(message)

        it 'should emit the message', ->
          expect(@onMessage).to.have.been.called

      describe 'when given one more character', ->
        beforeEach (done) ->
          @sut.once 'message', => done()
          message = devices: ['apple'], topic: 'pears', payload: 'hi'
          @redis.publish 'test:received:apple', JSON.stringify(message)

        it 'should emit the message', ->
          expect(@onMessage).to.have.been.called

      describe 'when given a longer string', ->
        beforeEach (done) ->
          @sut.once 'message', => done()
          message = devices: ['apple'], topic: 'pearson', payload: 'hi'
          @redis.publish 'test:received:apple', JSON.stringify(message)

        it 'should emit the message', ->
          expect(@onMessage).to.have.been.called

      describe 'when given a different string', ->
        beforeEach ->
          message = devices: ['apple'], topic: 'paer', payload: 'hi'
          @redis.publish 'test:received:apple', JSON.stringify(message)

        beforeEach (done) ->
          setTimeout done, 100

        it 'should not emit the message', ->
          expect(@onMessage).not.to.have.been.called
