我有一个测试,它从页面对象调用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()函数。但我宁愿返回一个布尔值来表示成功或失败,因为这会使我们的应用程序更加普遍有用。
答案 0 :(得分:2)
expectModalBoldTextOf()
返回一个承诺,它将被Control Flow解析为布尔值。放置any
返回类型并在测试中显式解析函数结果:
page.expectModalBoldTextOf('Expected Text').then(function (succeed) {
if (succeed) {
page.clickButton('Yes');
}
});