title: My Mocha test passes on first time but fails on subsequent runs when using watch
body: <p>I am writing integration tests using mocha and chai. I want to use mocha -w however whenever the code re-runs due to changes, the tests fails with the message that done was not called. However every time that I stop mocha and run again it runs fine. There seems to be some type of scoping issue, that when mocha re-runs some things are out of scope. Any help would be appreciated!</p>
  
  <p>Using Mocha "mocha@3.2.0"</p>
  
  <pre><code>function sendGoodMsg(){
    return sendMsg(payloads.goodPayload, "good_msg")
  }
  
  function tooManyMsg(){
    return sendMsg(payloads.tooManyPayload, "too_many_msg")
  }
  function tooFewMsg(){
    return sendMsg(payloads.tooFewPayload, "too_few_msg")
  }
  function sendMsg(payload, type){
    //get process started
    let sentMsg = new queue.CCMessage( 'scheduler_service', queue.WORK, 'setSchedule' );
    sentMsg.context.origContext = uuid.v4();
    sentMsg.context.testType = type;
    sentMsg.payload = payload;
    return sentMsg.Send();
  }
  
  function receiveMsg(payloadType){
    return new Promise(resolve =&gt;{
      const messageReceiver = new queue.MessageReceiver(queue.THIS_SERVICE, queue.WORK);
      messageReceiver.on('setSchedule', (msg)=&gt;{
        if(msg.context.testType === payloadType){
          resolve(msg.payload);
          msg.ACK();
        } else {
          msg.NAK();
        }
      });
      messageReceiver.Listen();
    })
  }
  
  describe("should receive sent message", function(){
    it('should have the following fields', function () {
      return sendGoodMsg().then(()=&gt;{
        return receiveMsg("good_msg").then(payload =&gt;{
          return assert.isTrue(processMessage.messageIsValid(payload));
        })
      })
    })
    it('should not have extra fields', function () {
      return tooManyMsg().then(()=&gt; {
        return receiveMsg("too_many_msg").then(payload =&gt; {
          return assert.isFalse(processMessage.messageIsValid(payload));
        })
      })
    })
    it('should not be missing fields', function () {
      return tooFewMsg().then(()=&gt; {
        return receiveMsg("too_few_msg").then(payload =&gt; {
          return assert.isFalse(processMessage.messageIsValid(payload));
        })
      })
    })
  });
  </code></pre>