我尝试使用Protractor和chai-as-promise来编写带有cucumber.js的测试。
在我的Page对象中,我有这些代码片段:
var menu = {};
menu.name = 'Abc';
expect(new MenusPage().isMenuListed(menu)).to.eventually.be.true.notify(done);
并在我的步骤定义代码中执行:
$(".selector option").each(function(){
$(this).attr('data-img-src', function() {
var file = this.value + '.png';
var img = file.toLowerCase().replace(/ /g, '-');
var path = 'path to folder';
return path+img
});
});
当我运行此测试时,我得到了
预期未定义为真
这意味着isMenuListed方法返回undefined而不是true。但是,我调试了它,我可以看到'返回true;'声明已经执行。
在这种情况下,我是否遗漏了承诺如何运作?
答案 0 :(得分:1)
或者,您也可以在此处申请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
来解决,其中定义了是否列出了菜单。