Attualmente sto lavorando per provare a creare test end-to-end utilizzando PhantomJS e CasperJS. Quello che ho incontrato è una situazione in cui PhantomJS manca di promesse. Attualmente il nostro progetto li implementa. L'applicazione è utilizzata solo in Google Chrome che supporta le promesse in modo nativo.CasperJS/PhantomJS ES6 Promise Polyfill
Durante l'esecuzione mie prove ricevo l'errore: Errore: ReferenceError: Non riesci a trovare variabile: Promessa
Questo sembra essere, perché la versione corrente di Webkit in PhantomJS non ha il supporto per le promesse . Mi rendo conto che SlimerJS ha questo supporto tramite Gecko, tuttavia la nostra app funziona su Chrome e quindi vorrei che i test si verifichino in Webkit.
Quello con cui ho avuto difficoltà è l'iniezione di un polyfill con ES6 in Phantom in modo che il test si verifichi correttamente. Ho usato sia injectjs di Casper JS che casper.options.clientScripts.push - entrambi sembrano ancora riportare questa mancanza di supporto per il problema delle promesse.
Ho notato che altri hanno affermato nel supporto Github di CasperJS che hanno ottenuto il funzionamento tramite polyfill, ma non sono sicuro di come hanno fatto questo, poiché non sono forniti esempi.
Ho incluso un esempio del mio script corrente. Se qualcuno ha affrontato questo problema e trovato un modo per risolverlo, l'aiuto sarebbe molto apprezzato. Grazie in anticipo!
casper.test.begin('Example test loading', 3, function(test) {
casper.options.clientScripts.push("node_modules/es6-promise/es6-promise.js");
casper.start('http://localhost:8080/', function() {
this.captureSelector('stuff.png', 'html');
});
casper.on("remote.message", function(msg) {
this.echo("Console: " + msg);
});
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg);
});
casper.on("resource.error", function(resourceError) {
this.echo("ResourceError: " + JSON.stringify(resourceError, undefined, 4));
});
casper.on("page.initialized", function(page) {
page.onResourceTimeout = function(request) {
console.log('Response Timeout (#' + request.id + '): ' + JSON.stringify(request));
};
});
casper.then(function() {
test.assertTitle('Example Title', 'Example title is incorrect');
});
casper.run(function() {
test.done();
});
});
'clientScripts' sono probabilmente iniettati troppo tardi nella pagina per il tuo caso d'uso. –
Come nota per chiunque abbia affrontato questo problema, per questo motivo sono passato a slimerJS per questo progetto. Tuttavia, phantomJS ha il supporto pianificato per le promesse in modo nativo e dovrebbe essere rilasciato prima o poi. È possibile rivedere il problema qui: https://github.com/ariya/phantomjs/issues/14166 - un dev (Vitallium) commenti su questo a metà del problema. –