Проще всего было бы использовать встроенную поддержку обещаний, которую Mocha имеет в последних версиях:
it('Should return the exchange rates for btc_ltc', function() { // no done
var pair = 'btc_ltc';
// note the return
return shapeshift.getRate(pair).then(function(data){
expect(data.pair).to.equal(pair);
expect(data.rate).to.have.length(400);
});// no catch, it'll figure it out since the promise is rejected
});
Или с современным узлом и асинхронным / ждущим:
it('Should return the exchange rates for btc_ltc', async () => { // no done
const pair = 'btc_ltc';
const data = await shapeshift.getRate(pair);
expect(data.pair).to.equal(pair);
expect(data.rate).to.have.length(400);
});
. Поскольку этот подход обещает до конца, его легче тестировать, и вам не придется думать о странных случаях, о которых вы думаете, как о нечетных вызовах done()
во всем мире.
Это преимущество, которое Моча имеет в отношении других библиотек, таких как Jasmine на данный момент. Вы также можете проверить Chai As Promised , что сделало бы его еще проще (нет .then
), но лично я предпочитаю ясность и простоту текущей версии