Skip to content

Instantly share code, notes, and snippets.

@DavidBruant
Last active December 12, 2015 04:19
Show Gist options
  • Save DavidBruant/4713731 to your computer and use it in GitHub Desktop.
Save DavidBruant/4713731 to your computer and use it in GitHub Desktop.
function load(fixtures, onComplete) {
async.parallel(fixtures.map(function(fixture) {
return function(cb) {
store(fixture, function(err, result) {
cb(err, result);
});
};
}), onComplete);
}
describe("moods tests", function() {
var moods = [
"2013-02-01:n1k0:sunny"
, "2013-02-02:n1k0:cloudy"
, "2013-02-03:n1k0:stormy"
, "2013-02-04:n1k0:rainy"
// … we could add many more
];
it ("should do something useful with moods", function(done) {
load(moods, function(err, storedMoods) {
done(err || undefined); // to make a fair comparison
});
});
});
function load(fixtures) {
return Q.all(fixtures.map(store)); // assumes the store function returns a promise for success
}
describe("moods tests", function() {
var moods = [
"2013-02-01:n1k0:sunny"
, "2013-02-02:n1k0:cloudy"
, "2013-02-03:n1k0:stormy"
, "2013-02-04:n1k0:rainy"
// … we could add many more
];
// a promise-freindly test framework would expect promises to be returned
it ("should do something useful with moods", function() {
return load(moods);
});
});
@n1k0
Copy link

n1k0 commented Feb 5, 2013

Maybe Mocha won't ever be promise-friendly, but it wouldn't be hard to modify it for that purpose.

https://gist.github.com/mjijackson/3956521 :)

@n1k0
Copy link

n1k0 commented Feb 5, 2013

OK, here's where all the war is at mochajs/mocha#329

@n1k0
Copy link

n1k0 commented Feb 5, 2013

UPDATE: the war has visibly been solved here http://chaijs.com/plugins/chai-as-promised ;)

@balupton
Copy link

balupton commented Feb 5, 2013

Cool! This has definitely given me some incentive to look into promises some more. For what it's worth, I've done up how I would accomplish the snippet here https://gist.github.com/balupton/4714965 uses bal-util for flow and joe for testing. Feedback welcome.

@n1k0
Copy link

n1k0 commented Feb 6, 2013

For the records, Async.js ships with a native map method, not sure how I missed it :x

So the code is even shorter:

describe("moods tests", function() {
    var moods = [
        "2013-02-01:n1k0:sunny"
      , "2013-02-02:n1k0:cloudy"
      , "2013-02-03:n1k0:stormy"
      , "2013-02-04:n1k0:rainy"
      // … we could add many more
    ];

    it("should do something useful with moods", function(done) {
        async.map(moods, store, function(err, storedMoods) {
            assert.ifError(err);
            // now let's test stuff with stored moods
            done();
        });
    });
});

I could have kept the load() function in order to make the actual test code even shorter but I wouldn't really see the point.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment