2016-06-06 12 views
5

Ho alcune stringhe che ho estratto usando goniometro/gelsomino/angolareJS e convertito in numeri interi. Ora sto cercando di aggiungerli e confrontarli in una dichiarazione di aspettativa. Ma sto ottenendo alcuni errori di promessa nel farlo.aggiunta di variabili insieme nell'aspettativa

var result0 = element.all(by.binding('Inboxes.Inbox.Count')).first().getText().then(parseFloat); 
    result0.then((value) => console.log("count: ", value)); 

    var result1 = element.all(by.binding('InboxItem.Count')).get(0).getText().then(parseFloat); 
    result1.then((value) => console.log("count: ", value)); 

    var result2 = element.all(by.binding('InboxItem.Count')).get(1).getText().then(parseFloat); 
    result2.then((value) => console.log("count: ", value)); 

    var result3 = element.all(by.binding('InboxItem.Count')).get(2).getText().then(parseFloat); 
    result3.then((value) => console.log("count: ", value)).then(expect(result1 + result2 + result3).toEqual(result0)); 

    //compare badge counts to Inbox badge count 
    expect(result1 + result2 + result3).toEqual(result0); 
    }); 
}); 
}); 

Ho i seguenti errori di promessa. Ho pensato che dal momento che le promesse erano già state soddisfatte e che i conteggi riportati sotto (41, 7, 14 e 20) potevo aggiungere il 3 in basso (reulst1-3) insieme e confrontare con result0 che è il totale del risultato1-3 . Sto vivendo un momento con queste promesse dato che sono nuovo e non le capisco molto bene.

Started 
count: 41 
count: 7 
count: 14 
count: 20 
F 

Failures: 
1) Workflow Application When selecting Alerts panel should expand the Inbox panel and Postings 
    Message: 
    Expected 'ManagedPromise::859 {[[PromiseStatus]]: "pending"}ManagedPromise::896 {[[PromiseStatus]]: "pending"}ManagedPromise::933 {[[PromiseStatus]]: "pending"}' to equal ManagedPromise::822 {[[PromiseStatus]]: "pending"}. 

risposta

4

Sei cercando di aggiungere promesse insieme, non reale valori risolti.

In questo caso, vorrei risolvere questo utilizzando il protractor.promise.all() di risolvere tutte le promesse necessari per rendere l'attesa, in una sola volta:

protractor.promise.all([result0, result1, result2, result3]).then(function (values) { 
    expect(values[1] + values[2] + values[3]).toEqual(values[0]); 
}); 

E, per semplificare questo, si può spread() the resolved values in " poi" gli argomenti della funzione:

protractor.promise.all([result0, result1, result2, result3]).then(spread(function (value0, value1, value2, value3) { 
    expect(value1 + value2 + value3).toEqual(value0); 
})); 

Si noti che, a differenza di q, protractor.promise non ha il spread() integrato e devi averne uno personalizzato.

+0

Grazie! questo ha funzionato. –

+0

Fantastico, grazie per le informazioni. –

2

userei .map per mantenerlo semplice ed efficace:

var total = element(by.binding('Inboxes.Inbox.Count')) 
    .getText() 
    .then(parseInt); 

element.all(by.binding('InboxItem.Count'))  // get the elements 
    .map((e, i) => e.getText().then(parseInt)) // parse each text 
    .then((values) => {       // assert the values 
     expect(total).toEqual(values[0] + values[1] + values[2]); 
    }); 
Problemi correlati