2016-02-08 1 views
3

Я пытаюсь вернуть значение из обещания WebDriver в решении Protractor с использованием TypeScript, но в качестве ответа получаю undefined.Return Promise Value from Page Object using TypeScript

get nameInput(): string { 
    var value: string; 
    this.nameElement.getAttribute('value').then(v => value = v); 
    return value; 
} 

В приведенном выше случае, кажется, что функция не ждет обещание вернуться, поэтому я попытался отходя от стиля геттерного и объявлен тип возвращаемого обещание WebDriver в:

getNameInput(): webdriver.promise.Promise<string> { 

    var nameElement = element(by.id('name')); 
    return nameElement.getText().then(v => { return v }); 

} 

Но я получаю Function в качестве возврата вместо значения v. Похоже, что обещание не разворачивается Жасмин expect, как это происходит при запуске его в JS.

Я знаю, что могу выполнить обещание непосредственно в ожидании, но в идеале я бы создал всю логику функции вне любых ожиданий, так что я смогу потом оживить вызов функции любыми (если есть) параметрами - вместо того, чтобы загрязнять тестовый пример логикой обещания.

Любые идеи?

ответ

5

Вам не нужно решать свои обещания, только вернуть им:

getNameInput(): webdriver.promise.Promise<string> { 
    var nameElement = element(by.id('name')); 
    return nameElement.getText(); 
} 

Тогда вам нужно иметь реальное значение, возвращенное из getNameInput() - разрешить его в тесте:

getNameInput().then(v => { console.log(v) }); 

Обратите внимание, что вы также позволить expect() решительность его неявно:

expect(getNameInput()).toEqual("Expected Value");