The problem ended up being that the event listeners setup weren't being destroyed between tests. I fixed the issue by modifying the setUp function to use proxyquire with the noPreserveCache flag set:
var proxyquire = require( 'proxyquire' );
...
setUp: function ( callback ) {
this.app = {};
proxyquire.noPreserveCache();
var async_setup = proxyquire( '../async_setup', {} );
async_setup( this.app, callback );
}
The error message in Webstorm had more info, with a stack trace to a nodeunit async module error:
iterator(x.value, function (err, v) {
Cannot read property 'value' of undefined
When I stepped through the code I noticed that there were two event listeners setup even though I only set one in the test.
Hope this helps someone else out there.