如何避免深入嵌套在nodejstesting?

你会介意分享你的testingnodejs的最佳做法吗?

什么是你的经验,以避免深嵌套? 编写testing时,无法弄清楚如何重构这段代码来closures它。

describe('ProcessRawData', function(){ describe('event that has been already handled', function(){ beforeEach(function(done){ store.testMode(true); var filename = __dirname + '/data/test.txt'; fs.readFile(filename, 'utf8', function(err, rawData) { prd.process(rawData, function(err, data){ var rawMsgSha1 = '123464fbcb34c333f4300a88f019f43e7de757d6'; store.sismember('events:handled', rawMsgSha1, function(err, exists){ if (err) throw err; assert.ok(exists); done(); }); }); }); }) 

你可以考虑使用像step这样的asynchronousstream程控制库,这会使你的代码看起来像这样(未经testing):

 describe('ProcessRawData', function(){ describe('event that has been already handled', function(){ beforeEach(function(done){ store.testMode(true); var filename = __dirname + '/data/test.txt'; Step( function readFile() { fs.readFile(filename, 'utf8', this); }, function processRawData(err, rawData) { if (err) throw err; prd.process(rawData, this); }, function doMoreProcessing(err, data) { if (err) throw err; var rawMsgSha1 = '123464fbcb34c333f4300a88f019f43e7de757d6'; store.sismember('events:handled', rawMsgSha1, this); }, function checkIfExists(err, exists) { if (err) throw err; assert.ok(exists); done(); } ); }); }); })