我想知道如何阻止控制台在测试时打印堆栈转储并 promise 抛出错误。
doCallTest = function() {
var p = new Promise(function(resolve, reject) {
reject(new Error('Nooooo'));
}).catch(function(err) {
throw new Error(err);
});
return Promise.delay(100).return(p);
};
// This prints error message `Error: Nooooo` and stack dump and halts the test
return expect(doCallTest()).to.eventually.be.rejectedWith('Nooooo');
我看到很多人提到类似的问题,但不知道如何解决。有 Bluebird.onPossouslyUnhandledRejection
但这只是困惑:
var P = require('bluebird');
P.onPossiblyUnhandledRejection(function(error){
expect(error.message).to.be.eql('Nooooo');
done();
});
doCallTest();
我如何利用 Chai 的带有 Promise 的抛出错误测试?
编辑我已将范围缩小到delay() 调用。删除它就可以正常工作了。
可能相关:https://github.com/petkaantonov/bluebird/issues/100
更新这个问题似乎是因为我使用了delay()
:
return Promise.delay(100).return(p);
而不是:
return p.delay(100);
后者最初对我不起作用,这就是我更改它的原因 - 我怀疑这是因为我的 catch 调用是如何设置的。通过改变周围的东西,我能够使用后一种格式:
doCallTest = function() {
var p = new Promise(function(resolve, reject) {
reject(new Error('Nooooo'));
});
return p.delay(100);
};
最佳答案
doCallTest
返回一个因错误而拒绝的 promise ,而不是字符串 "Nooooo"
。 (作为旁注,请不要在没有错误的情况下拒绝)
试试这个,它会拒绝字符串:
doCallTest = function() {
return P.reject('Nooooo');
};
关于javascript - 使用 chai 和 Promise 捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28642637/