He Angular2 proyecto de construir con Angular de la CLI (beta 20).

Hay una manera de ejecutar las pruebas en contra de sólo uno de los seleccionados archivo spec?

Yo solía tener un proyecto basado en la Angular2 de inicio rápido, y yo podría agregar manualmente las especificaciones a jazmín archivo. Pero no sé cómo configurarlo fuera de karma o pruebas de cómo limitar el karma pruebas para archivos específicos con Angular de la CLI construye.

InformationsquelleAutor Zielu | 2016-11-18

7 Comentarios

  1. 166

    Cada uno de sus .spec.ts archivo tiene todos sus pruebas agrupadas en describe bloque como este:

    describe('SomeComponent', () => {...}

    Se puede ejecutar fácilmente este único bloque, anteponiendo el describe nombre de la función con f:

    fdescribe('SomeComponent', () => {...}

    Si usted tiene tal función, ningún otro describe bloques de ejecución.
    Btw. usted puede hacer algo similar con it => fit y también hay una «lista negra» de la versión x. Así:

    • fdescribe y fit causas sólo funciones marcadas de esta manera ejecutar
    • xdescribe y xit causas todos pero funciones marcadas de esta manera ejecutar
    • jazmín.github.io/api/2.8/global.html#fdescribe
    • He utilizado fdescribe en mi helloworld.componente.spec.archivo ts, pero los errores de aplicación.componente.spec.archivo ts también son mostrados.
    • Eso es porque todo el código está siendo evaluado (de lo contrario no sabría que hay fdescribes dentro de sus pruebas) – fdescribe sólo los límites de los resultados de las pruebas de ejecución. Usted stil necesidad de corregir la sintaxis / errores de transcripción en otros archivos.
    • Creo que aunque el OP aceptado esta respuesta la pregunta era en realidad cómo sólo se evalúa una especificación de archivo 😛
    • Esta no es la respuesta. @iislucas tiene la respuesta a continuación.
  2. 60

    Configurar test.ts archivo dentro de src carpeta:

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

    Reemplazar /\.spec\.ts$/ con el nombre de archivo que desea probar. Por ejemplo: /app.component\.spec\.ts$/

    Esto va a ejecutar la prueba sólo para app.component.spec.ts.

    • debe ser aceptado por la respuesta, este enfoque elimina una carga de gumpfy de salida en los registros – a diferencia de fdescribe que es detallado
    • solución fácil 🙂 salvó un montón de tiempo.
    • Esto coincidirá con componentes de nada, antes de que la ‘app’ para ‘producto de la aplicación.componente.spec.ts’ o ‘el fin de la aplicación.componente.spec.ts’ también sería una coincidencia. Yo no soy el mayor con regx. Hay una manera de centrarse específicamente en la ‘app.componente.spec.ts’?
    • Traté de /^de la aplicación.component\.spec\.ts$/ pero no hubo suerte. Parece trabajar en una regex tester pero ng prueba no gusta por alguna razón, se produce un error.
    • debe ser la respuesta recomendada
  3. 23

    Puede probar solo archivo específico con el Angular de la CLI (el ng de comandos) como este:

    ng test --main ./path/to/test.ts

    Más docs están en https://angular.io/cli/test

    Tenga en cuenta que aunque esto funciona para independiente de los archivos de la biblioteca, no va a funcionar para componentes angulares/servicios/etc. Esto es porque angular archivos tienen dependencias en otros archivos (es decir, src/test.ts Angular 7). Por desgracia, el --main bandera no tomar varios argumentos.

    • Esta es una gran sugerencia y funciona. Gracias! Además vale la pena ser conscientes de que si tratamos de apuntar a un auto-generado component.spec.ts archivo, veremos que las pruebas nunca kick off: 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 más solución puede ser hackeado, pero es algo para tener en cuenta porque el programa de instalación realiza dentro de src/main.ts y sus importaciones no está disponible en este caso.
    • Al ejecutar el conjunto de pruebas usando el comando ng t la prueba de que estoy escribiendo pasa pero cuando ejecuto el archivo específico que da error. TypeError: No se puede leer la propiedad ‘getComponentFromError’ null en TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js:3112:1) en TestBedViewEngine.get (node_modules/@angular/core/fesm2015/testing.js:3230:1) en la Función.get (node_modules/@angular/core/fesm2015/testing.js:2960:1) en UserContext.<anonymous> (src/app/timebar.servicio.spec.ts:14:45)»
  4. 5

    Si quieres ser capaz de controlar qué archivos son seleccionados a partir de la línea de comandos, me las arreglé para hacer esto Angular 7.

    En resumen, usted necesita para instalar @angular-devkit/build-angular:browser y, a continuación, crear una personalizada webpack plugin para pasar el archivo de prueba de expresión a través de. Por ejemplo:

    angular.json de cambio de la prueba de generador de @angular-devkit/build-angular:browser y personalizar el archivo de configuración:

    ...
    
            "test": {
              "builder": "@angular-builders/custom-webpack:browser",
              "options": {
                "customWebpackConfig": {
                  "path": "./extra-webpack.config.js"
                },
    ...
    

    extra-webpack.config.js – crear un webpack de configuración en la que se lee la expresión regular desde la línea de comandos:

    const webpack = require('webpack');
    const FILTER = process.env.KARMA_FILTER;
    let KARMA_SPEC_FILTER = '/.spec.ts$/';
    if (FILTER) {
      KARMA_SPEC_FILTER = `/${FILTER}.spec.ts$/`;
    }
    module.exports = {
      plugins: [new webpack.DefinePlugin({KARMA_SPEC_FILTER})]
    }
    

    de la prueba.ts – editar la especificación

    ...
    //Then we find all the tests.
    declare const KARMA_CONTEXT_SPEC: any;
    const context = require.context('./', true, KARMA_CONTEXT_SPEC);
    

    A continuación, utilizar la siguiente manera para reemplazar el valor predeterminado:

    KARMA_FILTER='somefile-.*\.spec\.ts$' npm run test
    

    He documentado la historia aquí, disculpas de antemano por tipos y mis enlaces. Crédito a la respuesta anterior por @Aish-Anu para que me apunta en la dirección correcta.

  5. 4

    Este es trabajo para mí en Angular 7. Se basa en la –principal opción de la ng de comandos. No estoy seguro de si esta opción está indocumentados y, posiblemente, sujetos a cambio, pero a mí me funciona. Puedo poner una línea en mi paquete.archivo json en secuencias de comandos de la sección. Allí utilizando la opción –opción principal de con el ng comando de prueba, puedo especificar la ruta de acceso a la .spec.ts archivo que desea ejecutar. Por ejemplo

    "test 1": "ng test --main E:/WebRxAngularClient/src/app/test/shared/my-date-utils.spec.ts",
    

    Puede ejecutar la secuencia de comandos ejecutar cualquier script. Lo corro en Webstorm haciendo clic en «test 1» en el mecanismo nacional de prevención de la sección.

  6. 3

    He resuelto este problema por mí mismo usando grunt. Tengo el gruñido de secuencia de comandos a continuación. Lo que el script no se toma el parámetro de línea de comandos de la prueba específica para ejecutar y crea una copia de prueba.ts y pone esta prueba específica nombre en el no.

    Para ejecutar esto, primero debe instalar grunt-cli mediante:

    npm install -g grunt-cli
    

    Poner el siguiente gruñido dependencias en su paquete.json:

    "grunt": "^1.0.1",
    "grunt-contrib-clean": "^1.0.0",
    "grunt-contrib-copy": "^1.0.0",
    "grunt-exec": "^2.0.0",
    "grunt-string-replace": "^1.3.1"
    

    Para ejecutar guardar la siguiente grunt archivo como Gruntfile.js en su carpeta raíz. A continuación, desde la línea de comandos se ejecute como:

    grunt --target=app.component
    

    Esto va a ejecutar la aplicación.componente.spec.ts.

    Grunt archivo es la siguiente:

    /*
    This gruntfile is used to run a specific test in watch mode. Example: To run app.component.spec.ts , the Command is: 
    grunt --target=app.component
    Do not specific .spec.ts. If no target is specified it will run all tests.
    */
    module.exports = function(grunt) {
    var target = grunt.option('target') || '';
      //Project configuration.
      grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        clean: ['temp.conf.js','src/temp-test.ts'],
        copy: {
          main: {
            files: [
                 {expand: false, cwd: '.', src: ['karma.conf.js'], dest: 'temp.conf.js'},
                 {expand: false, cwd: '.', src: ['src/test.ts'], dest: 'src/temp-test.ts'}
                 ],
          }
        },
        'string-replace': {
              dist: {
                files: {
                  'temp.conf.js': 'temp.conf.js',
                  'src/temp-test.ts': 'src/temp-test.ts'
                },
                options: {
                  replacements: [{
                    pattern: /test.ts/ig,
                    replacement: 'temp-test.ts'
                  },
                  {
                    pattern: /const context =.*/ig,
                    replacement: 'const context = require.context(\'./\', true, /'+target+'\\.spec\\.ts$/);'
                  }]
                }
            }
        },
        'exec': {
            sleep: {
              //The sleep command is needed here, else webpack compile fails since it seems like the files in the previous step were touched too recently
              command: 'ping 127.0.0.1 -n 4 > nul',
              stdout: true,
              stderr: true
            },
            ng_test: {
              command: 'ng test --config=temp.conf.js',
              stdout: true,
              stderr: true
            }
        }
      });
    
      //Load the plugin that provides the "uglify" task.
        grunt.loadNpmTasks('grunt-contrib-clean');
        grunt.loadNpmTasks('grunt-contrib-copy');
        grunt.loadNpmTasks('grunt-string-replace');
        grunt.loadNpmTasks('grunt-exec');
      //Default task(s).
      grunt.registerTask('default', ['clean','copy','string-replace','exec']);
    
    };
    
    • Buscando en la aceptación de la solución, no creo que de esta manera se recomienda
    • mi solución evita tener que modificar el código fuente y por lo tanto evita posibles errores en la comprobación en el archivo. Mi solución permite simplemente especificando el nombre de la prueba en la línea de comandos mediante la automatización de los pasos manuales.
    • Sí, ese es un buen punto de realidad. Hay una buena probabilidad de que usted pueda olvidarse de quitar el xdescribe o fdescribe – y su prueba será permantely eliminado!
    • usted puede instalar/configurar tslint-jazmín-reglas para comprobar fdescribe/ajuste/xdescribe/salir llamadas y no el tslint ejecutar; si esto es parte de un precommit paso evita que accidentalmente comprobar en las pruebas, ya sea concentrado o con discapacidad.
  7. 0

    Cada spec.ts archivo tiene todos sus pruebas agrupadas en describir bloque:

    Por defecto es:

    describe('Component', () => { }
    

    Si desea ejecutar una prueba en particular de los casos:

    fdescribe('Component', () => { }
    

    Ignorar un archivo que se puede utilizar ‘x’:

    xdescribe('Component', () => { }
    

    Más Detalles:

    xdescribe va a excluir las especificaciones de ejecución.

    fdescribe primero ejecutar dichas especificaciones. si usted tiene tanto la fdescribe especificaciones será ejecutado y reset es ignorado

Dejar respuesta

Please enter your comment!
Please enter your name here