約束が完了したら必ず返却します。これにより、すべての呼び出しコード(この場合はMocha)がチェーンをさらに処理できます。
これはあなたのコードの合理的な抽象化であるように見えます:
// Example validator that will reject when `obj.value` equals 2:
function validate(obj) {
if (obj.value === 2) {
return Promise.reject(new Error("I hate 2's"));
} else {
return Promise.resolve();
}
}
describe('ValidatorFactory',() => {
it('should check data',() => {
let data = [
{ value : 1, valid : true },
{ value : 2, valid : false },
{ value : 3, valid : true }
];
return Promise.all(
data.map((el) => {
return validate(el).then(() => {
expect(el.valid).to.be.true;
},() => {
expect(el.valid).to.be.false;
});
})
);
})
})
[Promise.all(data.map(...))
コードは、このためのショートカットです。つまり
let array = []
array.push(validate(data[0]).then(..., ...));
array.push(validate(data[1]).then(..., ...));
...
return Promise.all(array);
、それは約束の配列を生成し、 Promise.all()
はそれらをすべて解決します。
Promise.all()
には"fail-fast" behaviourがあります。解決しなければならない約束の1つが拒否された場合、Promise.all()
によって返された約束はすぐに拒否されます。この状況では、これは予想の1つが失敗したときに起こります。私はそれが受け入れられると思います。
EDIT:代替手段として、あなたはchai-as-promised
を使用することができ、チャイに約束のサポートが追加されています
const chai = require('chai');
const expect = chai.expect;
chai.use(require('chai-as-promised'));
...
return Promise.all(
data.map((el) => {
return expect(validate(el)).to.be[ el.valid ? 'fulfilled' : 'rejected' ];
})
);
(それはエラーになります)成就にfullfilled変更してください。そうでなければ恐ろしい答え:-)私はあなたのポストで少なくとも6文字を編集する必要があるので、私はそれを行うことはできません...不要です:D –
@PotneySwitters oops = Dはそれを修正! – robertklep