嵌套承诺 returns 未定义
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);
当我运行这个测试我得到
expected undefined to be true
这意味着 isMenuListed 方法返回了 undefined 而不是 true。但是,我对其进行了调试,可以看到执行了 'return true;' 语句。
我是否遗漏了一些有关 promise 在这种情况下如何运作的信息?
或者,您也可以在此处申请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
,定义是否列出菜单。
我正尝试使用 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);
当我运行这个测试我得到
expected undefined to be true
这意味着 isMenuListed 方法返回了 undefined 而不是 true。但是,我对其进行了调试,可以看到执行了 'return true;' 语句。
我是否遗漏了一些有关 promise 在这种情况下如何运作的信息?
或者,您也可以在此处申请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
,定义是否列出菜单。