Se Goniometro sta sostituendo Angular Scenario Runner per i test E2E, significa che sarò ancora in grado di usarlo con Karma come framework di test E2E?
Se Goniometro sta sostituendo Angular Scenario Runner per i test E2E, significa che sarò ancora in grado di usarlo con Karma come framework di test E2E?
Risposte:
Non consigliato dall'attuale manutentore di Goniometro:
https://github.com/angular/protractor/issues/9#issuecomment-19927049
Goniometro e Karma non devono essere usati insieme; forniscono invece sistemi separati per l'esecuzione dei test. Goniometro e Karma coprono diversi aspetti dei test: Karma è inteso principalmente per i test unitari, mentre Goniometro dovrebbe essere utilizzato per i test end-to-end.
Goniometro è basato su WebDriverJS, che utilizza un server Selenium / WebDriver per eseguire il provisioning dei browser e guidare l'esecuzione dei test. Esempi di puro WebDriverJS possono essere trovati qui: http://code.google.com/p/selenium/wiki/WebDriverJs
E
https://github.com/angular/protractor/issues/9#issuecomment-19931154
Georgios - Penso che abbia senso tenere separati Goniometro e Karma - per i test end-to-end, vuoi che gli eventi nativi guidino e la flessibilità del webdriver, mentre per i test unitari vuoi un'esecuzione rapida e il rilevamento automatico dei file.
AGGIORNARE. Ecco un semplice pacchetto che ho creato per aggiungere una configurazione minima di Karma a qualsiasi progetto con un solo comando npm install min-karma
.
Vorrei chiarire alcuni possibili malintesi su Karma e Goniometro . Karma FAQ in realtà si riferisce a Adapter for Angular's Scenario Runner , che, tuttavia, sembra essere abbandonato, con Goniometro consigliato invece.
Karma è un test runner che eseguirà i file JavaScript specificati nel file di configurazione in modo esplicito o utilizzando i node-glob . (Per i modelli esterni non JavaScript , la Guida agli unit test di Angular consiglia di utilizzare il preprocessore html Karma per compilarli prima in JavaScript.)
Questi possono essere tutti i tuoi file sorgente, alcuni di loro, alcuni di loro più alcuni file aggiuntivi o file irrilevanti per il tuo progetto, fornendo solo qualche configurazione extra - lo chiami! Puoi avere più file di configurazione karma per scopi diversi, che puoi eseguire in parallelo o uno per uno. Ogni processo karma avvia il proprio set di browser (questi sono attualmente disponibili) .
Questa caratteristica di Karma di eseguire solo un set di file è ciò che lo rende perfetto per test veloci in esecuzione in background su ogni modifica del file sorgente e ottenere un feedback immediato, il che è fantastico! L'unico aspetto negativo è la segnalazione degli errori "rumorosa" che si spera migliorerà!
Lo unit test è per una singola unità del codice sorgente. Nel caso di Angular un'unità tipica è il componente angolare ( Service, Factory, Provider, Controller, Filter, Directive
ecc.). Ricordati di mantenere la tua Controllers
magrezza, quindi troppi test unitari per questi ultimi sono una bandiera rossa .
In uno unit test , ogni altra unità di codice da cui dipende questa unità (le cosiddette dipendenze di unità) non dovrebbe essere testata contemporaneamente. Invece dovrebbero essere "derisi", ad esempio sostituiti da qualcosa di semplice come istanze fittizie. Angular fornisce un ottimo supporto per l'ambiente fittizio . Idealmente vuoi vedere tutti quei mock direttamente all'interno dei tuoi test, quindi non devi mai chiederti da dove provengono tutte quelle dipendenze.
Karma è altrettanto utile per i test di integrazione , in cui un gruppo di unità di codice sorgente viene testato insieme, con solo alcune delle loro dipendenze che vengono derise. È importante ricordare che qualsiasi dipendenza viene fornita per impostazione predefinita dai moduli del codice sorgente (a condizione che quei moduli siano iniettati direttamente nei tuoi test , o siano dipendenze di altri moduli iniettati (nel qual caso non è necessario iniettarli , ma non è dannoso farlo) Le dipendenze derise sovrascriveranno quelle fornite.
La corsa veloce e frequente è la caratteristica principale di Karma . Ciò significa che si desidera evitare qualsiasi richiesta del server, qualsiasi query del database, tutto ciò che può richiedere più di frazioni di secondo. ( Altrimenti NON sarà veloce! ) Quei lunghi processi sono quelli che vuoi deridere . Questo spiega anche perché è una cattiva pratica inserire servizi grezzi di basso livello come $http
direttamente all'interno dei controller o di qualsiasi unità di logica aziendale complicata. Racchiudendo questi servizi di comunicazione esterna di basso livello in servizi dedicati più piccoli, è molto più facile "deriderli".
Quello che Karma non fa è eseguire il tuo sito così com'è, che è ciò che è il test End-to-End (E2E). In linea di principio, potresti utilizzare i metodi interni di Angular per ricreare il sito o le sue parti. Che, per piccoli pezzi, può essere utile e un modo veloce ad esempio per testare le direttive.
Tuttavia, non è un modo consigliato per lanciare codice complicato all'interno dei test. Più lo fai, più possibilità è che tu commetta errori in quel codice invece che in quello che stai effettivamente testando.
Questo è il motivo per cui personalmente non mi piace il modo complicato, spesso citato, di testare metodi utilizzando metodi di basso livello come $http
. Funziona in modo più pulito isolando qualsiasi riferimento a metodi di basso livello in metodi dedicati , la cui unica responsabilità è di effettuare richieste http. Questi metodi dedicati dovrebbero essere in grado di funzionare con un backend reale , non con uno falso! Che puoi facilmente testare - manualmente o anche perfettamente con Karma in esecuzione con un'altra configurazione speciale , purché non mescoli quella configurazione con quella solitamente utilizzata per eseguire Karmaregolare e veloce. Ora, dopo aver testato i tuoi piccoli servizi dedicati, puoi tranquillamente e facilmente deriderli per testare l'altra tua logica e inserire questi test nella tua normale configurazione Karma .
Riassumere. Usa Karma per eseguire qualsiasi set di file JavaScript. È (dovrebbe essere) veloce. Non vedi la tua app completa, quindi non puoi testare il risultato finale in modo efficace e affidabile. Lo eseguirò con Goniometro ? Perché dovrei? L'esecuzione di Goniometro rallenterebbe i miei test, vanificando lo scopo del Karma . È facile eseguire Goniometro separatamente.
un framework di test end-to-end per le applicazioni AngularJS. Goniometro esegue test sulla tua applicazione in esecuzione in un browser reale, interagendo con essa come farebbe un utente.
Quindi Goniometro fa esattamente ciò che Karma non fa: esegue la tua vera applicazione finale. Questo rivela sia la sua potenza che i suoi limiti:
L'esecuzione dell'applicazione completa è l'unico test finale affidabile per verificare che l'applicazione funzioni come previsto. Puoi scrivere scenari completi di storie utente e inserirli nei tuoi test!
Ma è più difficile tenere traccia degli errori senza isolare le singole unità del codice sorgente. Questo è il motivo per cui hai ancora bisogno di Karma per testare prima il tuo codice JavaScript.
Ora vorrei utilizzare Goniometro con Karma ? Sicuramente posso eseguirli in finestre di terminale separate, in parallelo. In linea di principio, potrei far condividere loro i file di prova se necessario, ma normalmente preferirei di no. Perché? Perché voglio mantenere i miei test piccoli con un unico scopo dedicato.
L'unica eccezione sarebbe un file che definisce le macro di test utili per entrambi i corridori. Questo, tuttavia, non sarebbe un file di prova ma un file di definizione di macro .
Oltre a questo, mi piace una netta separazione tra i miei test. Quelli da eseguire frequentemente e velocemente e quelli per l'app completa. Ciò fa una netta separazione tra quando si usa Karma e quando Goniometro .
Karma è un test runner fornito dal team Angular, Karma eseguirà i tuoi test in più browser che assicureranno che la nostra applicazione sia compatibile con tutti i browser. Unit Test per angular js può essere usato karma + jasmine
Jasmine è un framework di unit test javascript e ci fornirà utilità per testare la nostra applicazione. Questo funziona meglio sul framework Angular e quindi, la nostra scelta di "strumento di test di unità automatizzato". https://github.com/shahing/testingangularjs
E Protractor è un framework di test end-to-end per applicazioni Angular e AngularJS. Goniometro esegue test sulla tua applicazione in esecuzione in un browser reale, browser headless, test cross browser e può essere ospitato su saucelabs.
Sì, puoi usare karma e goniometro insieme. Karma viene utilizzato per testare l'unità del componente che hai creato usando il comando angolare, puoi testare quei componenti usando il karma. Il goniometro viene utilizzato per il test end to end. Viene utilizzato principalmente per i test dell'interfaccia utente.