[英]Nested promise returns undefined
我正在尝试使用Protractor和chai-as-promised用Cucumber.js编写测试。
在我的Page对象中,有以下代码片段:
var menusOnListElements = element.all(by.repeater('menu in menus').column('menu.name'))
this.isMenuListed = function(menu) {
return menusOnListElements.each(function(element) {
return element.getText().then(function (name) {
if (menu.name === name) {
return true; //this is executed
}
});
});
};
在步骤定义代码中,我执行了以下操作:
var menu = {};
menu.name = 'Abc';
expect(new MenusPage().isMenuListed(menu)).to.eventually.be.true.notify(done);
当我运行此测试时,我得到
预期未定义为真
这意味着isMenuListed方法返回的是undefined而不是true。 但是,我调试了它,可以看到“返回true”; 语句被执行。
我在这种情况下是否遗漏了诺言的工作方式?
另外,您也可以在此处应用reduce()
:
this.isMenuListed = function(menu) {
return menusOnListElements.reduce(function(acc, element) {
return element.getText().then(function (name) {
return acc || menu.name === name;
}, false);
});
};
此处的缺点是我们会遍历menusOnListElements
中的每个元素,并且如果找到匹配的菜单就不会停止。 除此之外, reduce()
将在此处以true
或false
解析,这定义了是否列出菜单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.