La Storia:promesse risolto e respinti in un costume Jasmine Matcher
Abbiamo sviluppato una matcher gelsomino personalizzata che fa 2 cose principali:
- mouse su un determinato elemento
- controllo che v'è una descrizione comando indicata con un testo desiderato
Attuazione:
toHaveTooltip: function() {
return {
compare: function(elm, expectedTooltip) {
var tooltipPage = requirePO("tooltip");
browser.actions().mouseMove(elm).perform();
browser.wait(EC.visibilityOf(tooltipPage.tooltip), 5000, "Tooltip is still not visible.");
return {
pass: tooltipPage.tooltip.getText().then(function(actualTooltip) {
return jasmine.matchersUtil.equals(actualTooltip, expectedTooltip);
}),
message: "Element does not have the tooltip '" + expectedTooltip + "'."
};
}
};
},
dove tooltipPage
è una pagina oggetto definito separatamente:
var Tooltip = function() {
this.tooltip = element(by.css(".tooltip"));
};
module.exports = new Tooltip();
L'utilizzo è molto conveniente per noi e aiuta veramente a seguire il principio DRY mantenere la nostra base di codice di prova pulita e leggibile:
expect(page.fromDateInput).toHaveTooltip("After");
il problema e la questione:
Ora, quello che sto cercando di fare è di avere i casi matcher maniglia 2 uso separatamente:
- non c'è tooltip al passaggio del mouse mostrato a tutti (che è, in sostanza, la promessa
browser.wait()
respinto) - c'è un tooltip, ma non quella desiderata
Come posso migliorare la matcher per essere in grado di gestire questi due problemi separatamente e segnalare diversi errori?
Quello che ho provato:
toHaveTooltip: function() {
return {
compare: function(elm, expectedTooltip) {
var tooltipPage = requirePO("tooltip");
browser.actions().mouseMove(elm).perform();
return browser.wait(EC.visibilityOf(tooltipPage.tooltip), 5000, "Tooltip is still not visible.").then(function() {
return {
pass: tooltipPage.tooltip.getText().then(function(actualTooltip) {
return jasmine.matchersUtil.equals(actualTooltip, expectedTooltip);
}),
message: "Element does not have the tooltip '" + expectedTooltip + "'."
};
}, function() {
return {
pass: false,
message: "No tooltip shown on mouse over the element"
}
});
}
};
},
Qui ho cercato di risolvere browser.wait()
esplicitamente e gestire il "successo" e casi "errore" a parte. Ciò si è tradotto in un timeout Jasmine Spec e un enorme testo "rossa" sulla console:
Expected ({ ptor_: ({ setFileDetector: Function, ...
5 minutes scrolling here
... InnerHtml: Function, getId: Function, getRawId: Function }) to have tooltip 'After'.
ho paura che non posso restituire un promessa dalla funzione "confrontare".
ciao, posso chiedere quale versione di gelsomino stai usando? 1.xo 2.x? – vrachlin
@vrachlin sicuro, gelsomino 2. Grazie. – alecxe