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.



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.


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!');
  });
});

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.


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


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í


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



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í


-3

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

Por ejemplo:

ng test foo.spec.ts

Espero que esto ayude.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.