javascript-茉莉花:如何期望承诺处理程序不会引发异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-茉莉花:如何期望承诺处理程序不会引发异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1632字,纯文字阅读大概需要3分钟。
内容图文
![javascript-茉莉花:如何期望承诺处理程序不会引发异常](/upload/InfoBanner/zyjiaocheng/665/d1d1bdf7c8d64781a6f2e9a73e139bb0.jpg)
我有这个功能:
reload() {
myService.queryData()
.done(...)
.always(() => throw "fake exception"); //just to simulate the failure
}
我想要我的测试重载函数,并确保它不会引发异常,也不会在promise回调中引发异常.
describe("reload", function () {
it("does not throw exception", function (done) {
spyOn(myService, "queryData").and.callFake(() => {
let deffered = $.deffered();
setTimeOut(() => deffered.reject(), 0)
return deffered.promise();
});
reload();
setTimeout(() => {
//this is evaluated after the exception has been thrown, but
//how to check whether exception has been thrown
}, 2);
});
});
编辑:在某些情况下,如果已经定义了函数的返回类型,例如组件的生命周期事件,我可能无法返回诺言:
MyComponent extends React.Component {
componentDidMount() {
this.load(
galleryService.nodes().then(galleryResult => this.setState({ nodes: galleryResult.nodes }))
);
this.load(
galleryService.caches().then(cachesResult => this.setState({ caches: cachesResult.caches }))
);
}
}
var myComponent = React.createElement(MyComponent);
TestUtils.renderIntoDocument(myComponent); //this triggers the componentDidMount event and I need to make sure it won't throw error.
解决方法:
让reload返回它创建的承诺.在您的测试用例中,在其上附加一个catch处理程序,这会触发测试失败:
reload().catch(err => done.fail(err));
编辑问题后进行更新:如果无法更改原始函数的返回值,则将相关部分分解为单独的函数.例如:
function reloadNodes() {
return somePromise();
}
function reloadCaches() {
return anotherPromise();
}
function reload() {
reloadNodes();
reloadCaches();
}
然后,您可以测试reloadNodes和reloadCaches而不是重新加载.显然,您不需要为每个promise创建单独的函数,而是在适当的地方使用诸如Promise.all之类的组合promise.
内容总结
以上是互联网集市为您收集整理的javascript-茉莉花:如何期望承诺处理程序不会引发异常全部内容,希望文章能够帮你解决javascript-茉莉花:如何期望承诺处理程序不会引发异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。