[英]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.