簡體   English   中英

嵌套的承諾返回未定義

[英]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()將在此處以truefalse解析,這定義了是否列出菜單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM