While using sinon extensively I realized that in most cases it's better to write assertions and define behaviors just right in a fake function:
it('Should list dir contents', function (done) {
fs.readdir('dir', function (err, list) {
should.not.exist(err)
list.should.eql(['a', 'b', 'c'])
done()