Tengo la compilación del proyecto Angular2 con Angular-CLI (beta 20).
¿Hay alguna manera de ejecutar pruebas contra un solo archivo de especificaciones seleccionado?
Solía tener un proyecto basado en el inicio rápido de Angular2, y podía agregar manualmente especificaciones al archivo de jazmín. Pero no sé cómo configurar esto fuera de las pruebas de karma o cómo limitar las pruebas de karma a archivos específicos con compilaciones de Angular-CLI.
fuente
fdescribe
oxdescribe
? No quiero que un crítico descuidado (yo) fusione un RP que omita todas mis pruebas.Configurar el
test.ts
archivo dentro de lasrc
carpeta:Reemplace
/\.spec\.ts$/
con el nombre del archivo que desea probar. Por ejemplo:/app.component\.spec\.ts$/
Esto ejecutará la prueba solo para
app.component.spec.ts
.fuente
Puede probar solo un archivo específico con la CLI angular (el
ng
comando) como este:Otros documentos están en https://angular.io/cli/test
Tenga en cuenta que si bien esto funciona para archivos de biblioteca independientes, no funcionará para componentes angulares / servicios / etc. Esto se debe a que los archivos angulares dependen de otros archivos (a saber
src/test.ts
en Angular 7). Lamentablemente, la--main
bandera no toma múltiples argumentos.fuente
component.spec.ts
archivo generado automáticamente , veremos que las pruebas nunca comienzan:Error: AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js
... Estoy seguro de que se pueden hackear una solución alternativa más, pero es algo a tener en cuenta porque la configuración realizada dentrosrc/main.ts
y sus importaciones no están disponibles en este caso.ng t
la prueba que estoy escribiendo pasa pero cuando ejecuto el archivo específico da error. TypeError: No se puede leer la propiedad 'getComponentFromError' de nulo en TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js: 3112: 1) en TestBedViewEngine.get (node_modules/@angular/core.fesm2015/test.fesm2015/test.fesm2015/test.fesmj15/test.fesm2015/test.fesm2015/test.fesm2015/test.fesm2015/test 3230: 1) en Function.get (node_modules/@angular/core/fesm2015/testing.js: 2960: 1) en UserContext. <anónimo> (src / app / timebar.service.spec.ts: 14: 45) "Si desea poder controlar qué archivos se seleccionan desde la línea de comando, logré hacerlo para Angular 7.
En resumen, debe instalar
@angular-devkit/build-angular:browser
y luego crear un complemento de paquete web personalizado para pasar la expresión regular del archivo de prueba. Por ejemplo:angular.json : cambia el generador de pruebas
@angular-devkit/build-angular:browser
y establece un archivo de configuración personalizado:extra-webpack.config.js : crea una configuración de paquete web que lee la expresión regular desde la línea de comandos:
test.ts - edita la especificación
Luego use lo siguiente para anular el valor predeterminado:
Documenté la historia de fondo aquí , disculpas de antemano por tipos y enlaces erróneos. Gracias a la respuesta anterior por @ Aish-Anu por señalarme en la dirección correcta.
fuente
Esto funciona para mí en Angular 7. Se basa en la opción --main del comando ng. No estoy seguro de si esta opción no está documentada y posiblemente esté sujeta a cambios, pero funciona para mí. Puse una línea en mi archivo package.json en la sección de secuencias de comandos. Allí, usando la opción --main de con el comando ng test, especifico la ruta al archivo .spec.ts que quiero ejecutar. Por ejemplo
Puede ejecutar el script mientras ejecuta cualquier script de este tipo. Lo ejecuto en Webstorm haciendo clic en "prueba 1" en la sección npm.
fuente
Resolví este problema por mí mismo usando gruñido. Tengo el guión gruñido a continuación. Lo que hace el script es ejecutar el parámetro de línea de comando de la prueba específica y crea una copia de test.ts y coloca este nombre de prueba específico allí.
Para ejecutar esto, primero instale grunt-cli usando:
Ponga las siguientes dependencias grunt en su package.json:
Para ejecutarlo, guarde el siguiente archivo grunt como Gruntfile.js en su carpeta raíz. Luego, desde la línea de comandos, ejecútelo como:
Esto ejecutará app.component.spec.ts.
El archivo Grunt es el siguiente:
fuente
Además de esto para personas como yo que buscaban una forma de ejecutar una sola especificación en Angular y encontraron este SO.
De acuerdo con los últimos documentos de Angular (v9.0.6 en el momento de la escritura), el
ng test
comando tiene una--include
opción donde puede especificar un directorio de*.spec.(ts|tsx)
archivos o solo uno.spec.(ts|tsx)
archivo.https://angular.io/cli/test
fuente
Solo se necesita un pequeño cambio en el
test.ts
archivo dentro de la carpeta src:Aquí,
test-example
está el nombre exacto del archivo que necesitamos ejecutarDel mismo modo, si solo necesita probar el archivo de servicio, puede reemplazar el nombre del archivo como "/test-example.service"
fuente
Esto funcionó para mí en todos los casos:
Sin embargo, generalmente obtengo "TypeError: No se puede leer la propiedad 'ngModule' de null" para esto:
Versión de @ angular / cli 10.0.4
fuente