对于摩卡测试,我想断言承诺最终会拒绝。
我不想使用chai-as-promised。我更喜欢使用Node的标准断言模块,而只是使用标准的ES6承诺。
我能想到的最好的就是这个,但感觉有点hacky:
it('foo should reject given bad data', function () {
var rejected;
return foo('bad data').catch(function (err) {
rejected = true;
}).then(function () {
assert(rejected);
});
});
任何人都可以建议一个更整洁,更有表现力的方式来扭转这种情况。承诺,所以拒绝变为满足,反之亦然?
答案 0 :(得分:1)
您可以直接断言传递true
或false
的分辨率和拒绝回调。
it('foo should reject given bad data', function () {
return foo('bad data').then(function () {
assert(false);
}, function () {
assert(true);
});
});
答案 1 :(得分:1)
您可以使用单个.done()
执行此操作:
it('foo should reject given bad data', function () {
return foo('bad data')
.done(assert.equal.bind(null, 'false', 'true', null), assert);
});
我使用assert.equal
的值会提供相当于assert(false)
的值,但如果要打印实际结果,显然可以删除最后一个null
。
修改:您可以通过定义自己的assertFail
函数来实现多个测试的清洁:
function assertFail () { assert(false); }
it('foo should reject given bad data', function () {
return foo('bad data')
.done(assertFail, assert);
});
答案 2 :(得分:-1)
您可以向Promise原型添加反向方法,然后只使用它。
Promise.prototype.reverse = function() {
return new Promise((resolve, reject) => {
this.then(reject).catch(resolve);
});
}
foo('bad data')
.reverse()
.then(e => assert(true))
.catch(e => assert(false));