使用Protractor,我如何从函数

时间:2015-12-28 18:42:10

标签: angularjs protractor

我有一个测试,它从页面对象调用2个函数。当第一个函数的期望成功时,我希望第二个函数正常执行。否则,我希望中止执行第二个函数。

这是我用2个函数测试的。

it('Should do something.', function () {
    page.expectModalBoldTextOf(('Expected Text'));
    page.clickButton('Yes');
});

这是我想要返回布尔值的函数。

public expectModalBoldTextOf(boldedText: string) : boolean {
    element.all(by.className('modal-body')).filter(function (elm) {
        return elm.isDisplayed().then(function (displayed) {
            return displayed;
        });
    }).then(function (modalBodyArray) {
        if (modalBodyArray.length === 0) { // force a descriptive failure.
            expect('Modal dialog').toBe('displayed on the page');
            return false;
        }
        else {
            modalBodyArray[0].element(by.tagName('strong')).getText().then(function (strongText) {
                expect(strongText.toUpperCase()).toBe(boldedText.toUpperCase());
                return true;
            });
        }
    });
}

现在,上面会出现以下Protractor错误。

  

声明类型既不是'void'也不是'any'的函数必须返回一个值或由一个'throw'语句组成。

如果我将返回类型从“boolean”更改为“any”,则此函数可以根据需要工作(当我删除return语句时),但它不会返回任何指示信号表示它成功或失败,以便我可以阻止来自执行的clickButton函数。

我知道只有在成功时才可以在expectModalBoldTextOf()函数中调用clickButton()函数。但我宁愿返回一个布尔值来表示成功或失败,因为这会使我们的应用程序更加普遍有用。

1 个答案:

答案 0 :(得分:2)

expectModalBoldTextOf() 返回一个承诺,它将被Control Flow解析为布尔值。放置any返回类型并在测试中显式解析函数结果:

page.expectModalBoldTextOf('Expected Text').then(function (succeed) {
    if (succeed) {
        page.clickButton('Yes');
    }
});