Ejecutando un solo archivo de prueba

138

¿Hay alguna manera de ejecutar ng testun solo archivo en lugar de todo el conjunto de pruebas? Idealmente, me gustaría obtener el ciclo de retroalimentación más rápido posible cuando estoy editando un archivo, pero karmaejecuta todo el conjunto en cada guardado, lo que es un poco lento cuando se crea un conjunto de pruebas lo suficientemente grande.


Esto es diferente de Cómo ejecutar solo una especificación de prueba con angular-cli en que esa pregunta se trata de ejecutar una especificación individual. Se trata de ejecutar un archivo individual. La solución involucra la misma característica de especificaciones de Jasmine, pero la naturaleza de la pregunta es ligeramente diferente.

Elliot Larson
fuente
Puede encontrar una respuesta aquí: stackoverflow.com/questions/40683673/…
Sahil Shikalgar el
Puede encontrar una respuesta aquí: stackoverflow.com/questions/40683673/…
Sahil Shikalgar el

Respuestas:

262

Descubrí que Jasmine te permite prefijar describey itmétodos con un f(¿para foco?). Entonces, fdescribey fit. Si usa cualquiera de estos, el karma solo ejecutará las pruebas relevantes. Entonces, para enfocar el archivo actual, puede tomar el nivel superior describey cambiarlo a fdescribe. Funciona para mis propósitos.

Elliot Larson
fuente
9
respuesta legendaria
danday74
2
No puedo creer que una funcionalidad tan importante no sea más obvia y directa.
Ash el
10
funciona, pero no es ideal porque necesita cambiar el código fuente y puede terminar ingresando el código modificado en el control de origen.
Marco Altieri
44
Agregue enlaces a la documentación oficial , cuando sea posible
jgpATs2w
He estado buscando esto, Impresionante
Carlos E
26

Vale la pena mencionar que puede deshabilitar una prueba en particular sin comentar xdescribeyxit

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

Y como alguien ya dijo si quieres concentrarte en alguna prueba, entonces fdescribeyfit

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

Esto se puede lograr en estos días a través de la includeopción. https://angular.io/cli/test#options

Es una coincidencia global, así que como ejemplo:

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

No puedo encontrarlo en las notas de la versión 8.1.0 , pero @Swoox menciona a continuación que esta es una característica después de la versión cli 8.1.0. Gracias por resolver eso.

Levi
fuente
1
Esto parece una actualización reciente. Es posible que desee incluir qué versión se necesita. Se necesita CLI 8.1.
Swoox
Parece ser eliminado en v9.1 :(
rmcsharry
2
Acabo de probar esto en CLI v9.1.0 y funciona perfectamente.
Sajjan Singh
9

Descubrí que ng testtiene una opción adicional --includeque puede usar para poder ejecutar la prueba para un solo archivo, o para un directorio en particular, o para un montón de archivos:

// 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

ng cli docs

var-bin
fuente
Angular 9 - parece haber sido eliminado
rmcsharry
No, todavía está disponible en NG 9.
Tephyr
6

Puede ir src/test.tsy cambiar la siguiente línea:

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

a

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

ingrese la descripción de la imagen aquí

Raghav
fuente
1
Hablando estrictamente, esto suena como la respuesta más correcta, aunque la mayoría de las preguntas sobre cómo hacer esto resuelven el problema usando fit y fdescribe. Hay un problema de git para lograr esto más fácilmente en Karma: github.com/karma-runner/karma/issues/1507 . Idealmente, aunque no simplemente, podríamos configurar Karma para poder hacer cambios en una prueba, y luego simplemente hacer clic en él en el navegador para volver a ejecutarlo con la actualización.
pumpkinthehead
3

Usando ng test --main file.spec.ts

Niraj
fuente
0

Debe ir src/test.tsy cambiar el siguiente código de número de línea 18:

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

a

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

ingrese la descripción de la imagen aquí

Priti jha
fuente
-3

Funciona si especifica su archivo de especificaciones como parámetro.

Por ejemplo:

ng test foo.spec.ts

Espero que esto ayude.

gustavomcastro
fuente
44
¿Puedes especificar qué versión estás usando? No funciona con 1.7.x
FrEaKmAn
44
No funcionó como es para mí tampoco. Pero lo modifiqué para que funcione con la opción --main antes de la ruta al archivo de especificaciones. Usé un camino absoluto con barras diagonales. No he probado un camino relativo. Uso de Angular 6. No estoy seguro de si es la mejor solución, pero parece funcionar para mí.
user2367418