2016-11-18 2 views
14

Ich habe Angular2-Projekt mit Angular-CLI (Beta 20) gebaut.Wie man nur eine Testspezifikation mit angular-cli ausführt

Gibt es eine Möglichkeit, Test nur für eine ausgewählte Spec-Datei auszuführen.

Ich hatte ein Projekt basierend auf Angular2 Schnellstart, und ich konnte Spezifikationen Jasmin Datei manuell hinzufügen. Aber ich weiß nicht, wie man ein solches außerhalb des Karma-Testens aufstellt oder wie man Karma-Tests auf einige Dateien mit angular-cli-Builds beschränkt.

Antwort

50

Jeder Ihrer .spec.ts Datei haben alle ihre Tests in describe Block wie folgt zusammengefasst:

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

Sie einfach nur diesen einzigen Block ausgeführt werden kann, indem die describe Funktionsnamen mit f prefixing:

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

Wenn Sie eine solche Funktion haben, werden keine anderen describe Blöcke Lauf. BTW. Sie können eine ähnliche Sache mit it =>fit tun, und es gibt auch eine "Blacklist" Version - x. Also:

  • fdescribe und fit verursacht nur Funktionen auf diese Weise
  • xdescribe und xit verursacht alle aber Funktionen markiert auf diese Weise
+0

https://jasmine.github.io/api/2.8/global.html#fdescribe – hkievet

1

Ich löste dieses Problem laufen markiert für mich zu laufen mit Grunzen. Ich habe das Grunt-Skript unten. Was das Skript macht, nimmt den Befehlszeilenparameter des spezifischen Tests zum Ausführen und erstellt eine Kopie von test.ts und fügt diesen spezifischen Testnamen dort ein. mit

dies ausführen zu können, installieren Sie zuerst grunzen-cli:

npm install -g grunt-cli 

die unter Grunzen Abhängigkeiten in Ihrem package.json Put:

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

es die folgenden Grunzen Datei als Gruntfile speichern auszuführen .js in Ihrem Stammordner. Dann von der Befehlszeile aus:

grunt --target=app.component 

Dies wird app.component.spec.ts ausführen.

Grunt-Datei ist wie folgt:

/* 
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']); 

}; 
+0

am akzeptierten Lösung Sehen, ich glaube nicht, diese Art und Weise ist empfohlen – Ryan

+0

@Brian - meine Lösung vermeidet, Quellcode zu ändern und verhindert somit mögliche Fehler beim Einchecken der Datei. Meine Lösung ermöglicht die Angabe des Testnamens in der Befehlszeile durch Automatisierung der manuellen Schritte. – vanval

+0

Ja, das ist eigentlich ein guter Punkt. Es besteht eine gute Chance, dass Sie vergessen, xdescribe oder fdescribe zu entfernen - und Ihr Test wird dauerhaft entfernt! – Ryan

Verwandte Themen