angularjs - Returnera Promise-värde från sidobjekt med TypeScript
Jag försöker returnera ett värde från ett WebDriver-löfte inom en Protractor-lösning med TypeScript, men jag får undefined som svar.
get nameInput(): string {
var value: string;
this.nameElement.getAttribute('value').then(v => value = v);
return value;
}
I det ovanstående fallet verkar det som att funktionen inte väntar på att löftet ska returnera, därför försökte jag gå bort från getter-stilen och deklarerade returtypen som WebDrivers löfte:
getNameInput(): webdriver.promise.Promise<string> {
var nameElement = element(by.id('name'));
return nameElement.getText().then(v => { return v });
}
Men jag får Function som retur istället för värdet av v. Det verkar som att promisen inte unwrapsas av Jasmines expect, som det händer när man kör det i JS.
Jag vet att jag kan köra löftet direkt inom expect, men idealt skulle jag skapa all funktionens logik utanför alla förväntningar, så att jag sedan kan mata förväntningen med funktionsanropet med eventuella (om några) parametrar bara - istället för att förorena testfallet med löfteslogik.
Några idéer?
Svar #1
Du behöver inte lösa löftena, bara returnera dem:
getNameInput(): webdriver.promise.Promise<string> {
var nameElement = element(by.id('name'));
return nameElement.getText();
}
Då behöver du ha ett verkligt värde som returneras från getNameInput() - lös det i ditt test:
getNameInput().then(v => { console.log(v) });
Observera att du också låter expect() lösa det implicit:
expect(getNameInput()).toEqual("Expected Value");
