In uno dei test, è necessario affermare che uno dei 3 elementi è presente. Attualmente stiamo facendo utilizzando il protractor.promise.all()
e Array.reduce()
:Asserire che un array si riduce a true
var title = element(by.id("title")),
summary = element(by.id("summary")),
description = element(by.id("description"));
protractor.promise.all([
title.isPresent(),
summary.isPresent(),
description.isPresent()
]).then(function (arrExists) {
expect(arrExists.reduce(function(a,b) { return a || b; })).toBe(true);
});
c'è un modo migliore per risolvere con Jasmine senza risolvere le promesse in modo esplicito? Avremmo bisogno di un matcher personalizzato o è possibile risolvere con i matchers integrati?
Nota che invece di 'reduce' puoi usare' arrExists.some (function (a) {return a;}) '. Con Jasmine dovresti usare l'argomento ['done' nel callback' it'] (http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support) e chiamarlo quando hai terminato il test . Non penso che ci sia un modo migliore. Hai comunque bisogno di aspettare che le promesse si risolvano. – trincot
@trincot ringrazia per il punto. Probabilmente avrei già detto che ['expect()' è "rattoppato" in Protractor per risolvere implicitamente le promesse] (http://www.protractortest.org/#/control-flow#protractor-adaptations) .. ma da I devono combinare i risultati di più promesse tra loro, potrebbe non essere d'aiuto in questo caso. – alecxe
Si dovrebbe fornire 'false' come valore iniziale in modo che funzioni anche su array vuoti. Oppure usa invece '.some (Boolean)'. – Bergi