Goniometro e Karma possono essere usati insieme?


104

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?


IMO dovresti essere in grado di farlo. Karma è solo il test runner. Una volta che hai scritto / costruito i tuoi casi di test in Goniometro ... karma dovrebbe essere in grado di eseguirlo quando richiesto. Allo stesso modo puoi chiedere a Karma di eseguire i test E2E attuali.
Skeep

1
@skeep Webdriver si genera e si connette ai browser tramite il protocollo WebDriver - qualcosa che Karma non supporta (utilizza invece WebSocket e una pagina web). Svolgono compiti simili in modi molto diversi. I test Karma E2E ormai deprecati non utilizzano WebDriver e ne soffrono: devono mantenere lo stato all'interno del browser (lo stato di WebDriver è completamente al di fuori del processo del browser).
Andy

Risposte:


102

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.


È ancora vero che non dovremmo eseguire Goniometro da Karma?
ErikAGriffin

@theLateWizard Assolutamente vero, non solo non dovresti, non puoi :)
Dmitri Zaitsev

74

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

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à!


Il karma non è solo per i test unitari

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, Directiveecc.). Ricordati di mantenere la tua Controllersmagrezza, 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 $httpdirettamente 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.


Goniometro

Il goniometro è:

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 .


Se voglio unit test e test e2e, devo configurare l'ambiente karma per il test unitario e il goniometro per il test ui o il test e2e?
Sunil Garg

@SunilGarg Sì, se si desidera utilizzare entrambi, ma come ho scritto, Karma non è solo per test unitari.
Dmitri Zaitsev

1

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.

https://github.com/shahing/Protractor-Web-Automation


1

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.


Per raggiungere questo obiettivo è necessario aggiungere la configurazione sia per il karma che per il goniometro
Rahul Solanki
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.