Come detto nei commenti, anche se inizialmente ho usato map
, ridurre permetterebbe di fare ciò che è necessario, e in questa casta, almeno rende molto più senso:
protractor.promise.all([text1, text2, text3]).then(function (values) {
expect(
values.reduce(function(p, v) {
return v.match(/expression/) || p;
}, false)
).toBe(true);
});
o scrivendo la stessa cosa , ma che utilizzano ES6 funzioni di direzione:
protractor.promise.all([text1, text2, text3]).then(function(values) {
exptect(
values.reduce((p, v) => v.match(/expression/) || p, false)
).toBe(true);
});
Entrambi fanno la stessa cosa, la richiamata ridurre imposterà falso, fino a quando l'espressione v.match
restituisce true.
Sto assumendo questo è evidente ai più, ma ho pensato di fornire entrambe le sintassi e qualche spiegazione per riferimento futuro
Forse questa soluzione potrebbe essere ottimizzato un po 'di più, smettere di corrispondenza il modello di una volta una singola partita è stata trovata:
protractor.promise.all([text1, text2, text3]).then(function (values) {
expect(
values.reduce(function(p, v) {
return p || !!v.match(/expression/);
}, false)
).toBe(true);
});
Tutto quello che ho fatto è stato quello di utilizzare il valore di ridurre la corrente come predefinito (una volta che è stato impostato su true, non c'è nessun punto nel testare qualsiasi altro valore stringa). Per garantire che v.match
valuti su un valore booleano anziché su un array, ho semplicemente utilizzato !!v.match()
. Quella parte è opzionale però. Nel ES6, la stessa cosa è simile al seguente:
protractor.promise.all([text1, text2, text3]).then(function(values) {
exptect(
values.reduce((p, v) => p || !!v.match(/expression/), false)
).toBe(true);
});
Questo potrebbe funzionare meglio con set di dati di grandi (considerando il match
chiamate si fermano una volta che il primo match è stato trovato, al contrario di v.match
essere chiamato ogni volta).
perché non si basta usare una variabile ('x = false;') e 'values.map (function (v) {x = v.match (/ espressione /) || X; }); 'e quindi solo' expect (x) .toBe (true); '? –
Cosa c'è di sbagliato in 'expect (values.some (function (i) {return /expression/.match(i);}). ToBe (true);'? – haim770
Sembra che un matcher personalizzato potrebbe essere la strada da percorrere: http : //jasmine.github.io/2.0/custom_matcher.html –