Esecuzione di un singolo file di prova


138

Esiste un modo per essere eseguito ng testper un singolo file anziché per l'intera suite di test? Idealmente, mi piacerebbe ottenere il ciclo di feedback più veloce possibile quando sto modificando un file, ma karmaesegue l'intera suite ad ogni salvataggio, il che è un po 'lento quando si crea una suite di test abbastanza grande.


Questo è diverso da Come eseguire solo una specifica di prova con angular-cli in quanto quella domanda riguarda l'esecuzione di una specifica individuale. Si tratta di eseguire un singolo file. La soluzione prevede la stessa funzione di specifica Jasmine, ma la natura della domanda è leggermente diversa.



È possibile trovare una risposta qui: stackoverflow.com/questions/40683673/...
Sahil Shikalgar

È possibile trovare una risposta qui: stackoverflow.com/questions/40683673/...
Sahil Shikalgar

Risposte:


262

Ho scoperto che Jasmine ti permette di prefisso describee itmetodi con un f(per focus?). Quindi, fdescribee fit. Se usi uno di questi, il karma eseguirà solo i test pertinenti. Quindi, per focalizzare il file corrente, puoi semplicemente prendere il livello più alto describee cambiarlo in fdescribe. Funziona per i miei scopi.


9
risposta leggendaria
danday74

2
Non riesco a credere che una funzionalità così importante non sia più ovvia e semplice.
Ash,

10
funziona ma non è l'ideale perché è necessario modificare il codice sorgente e si può finire per controllare il codice modificato nel controllo del codice sorgente.
Marco Altieri,

4
Aggiungi link alla documentazione ufficiale , quando possibile
jgpATs2w,

Ho cercato questo, fantastico
Carlos E

26

Vale la pena ricordare che è possibile disabilitare test particolari senza commentare da xdescribeexit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

E come qualcuno ha già detto se vuoi concentrarti su qualche test allora fdescribeefit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

Questo può essere raggiunto in questi giorni tramite l' includeopzione. https://angular.io/cli/test#options

È una partita glob, quindi ad esempio:

ng test --include='**/someFolder/*.spec.ts'

Non lo trovo nelle note di rilascio 8.1.0 , ma @Swoox menziona di seguito questa è una funzionalità dopo la versione cli 8.1.0. Grazie per averlo capito.


1
Questo sembra un aggiornamento recente. Potrebbe voler includere quale versione è necessaria. CLI 8.1 è necessario.
Swoox

Sembra essere rimosso in v9.1 :(
rmcsharry

2
Ho appena provato questo in CLI v9.1.0 e funziona perfettamente.
Sajjan Singh

9

Ho scoperto che ng testha un'opzione aggiuntiva --includeche è possibile utilizzare per poter eseguire il test per un singolo file, o per una directory particolare, o per un mucchio di file:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

di documenti cli


Angolare 9 - sembra essere stato rimosso
rmcsharry

No, è ancora disponibile in NG 9.
tephyr

6

Puoi andare a src/test.tse modificare la seguente riga:

const context = require.context('./', true, /\.spec\.ts$/);

per

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

inserisci qui la descrizione dell'immagine


1
A rigor di termini, questa suona come la risposta più corretta, anche se la maggior parte delle domande su come farlo hanno risolto il problema usando fit e fdescribe. C'è un problema git per farlo più facilmente in Karma: github.com/karma-runner/karma/issues/1507 . Idealmente, anche se non semplicemente, potremmo configurare Karma in modo da poter apportare modifiche a un test, quindi fare clic su di esso nel browser per eseguirlo nuovamente con l'aggiornamento.
pumpkinthehead,



0

Devi andare src/test.tse puoi modificare il seguente codice numero di riga 18:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

per

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

inserisci qui la descrizione dell'immagine


-3

Funziona se si specifica il file delle specifiche come parametro.

Per esempio:

ng test foo.spec.ts

Spero che questo ti aiuti.


4
Puoi specificare quale versione stai usando? Non funziona con 1.7.x
FrEaKmAn

4
Non ha funzionato come è per me. Ma l'ho modificato per funzionare con l'opzione --main prima del percorso del file delle specifiche. Ho usato un percorso assoluto con le barre in avanti. Non ho provato un percorso relativo. Uso di Angular 6. Non sono sicuro che sia la soluzione migliore, ma sembra funzionare per me.
user2367418
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.