1

我正在尝试使用量角器和 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。但是,我对其进行了调试,我可以看到“返回真”;语句被执行。

在这种情况下,我是否遗漏了有关承诺如何运作的信息?

4

1 回答 1

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()将在此处解析truefalse定义是否列出菜单。

于 2015-07-14T14:36:18.573 回答