Comment exécuter un seul test spec avec angular-cli

J'ai Angular2 project build avec Angular-CLI (beta 20).

y a-t-il un moyen d'exécuter test seulement contre un fichier spec sélectionné.

j'avais l'habitude d'avoir un projet basé sur Angular2 quick start, et je pouvais ajouter manuellement des spécifications au fichier jasmine. Mais je ne sais pas comment configurer un tel en dehors des tests de karma ou comment limiter les tests de karma à certains fichiers avec des constructions angular-cli.

29
demandé sur Zielu 2016-11-18 21:20:44

3 réponses

Chacun de vos .spec.ts le fichier a tous ses tests groupés dans describe bloc comme ceci:

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

vous pouvez facilement exécuter seulement ce bloc simple, en préfixant le describe nom de la fonction avec f:

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

Si vous avez une telle fonction, aucune autre describe blocs sera exécuté. Btw. vous pouvez faire la même chose avec it=>fit et il y a aussi une "liste noire" de la version x. Donc:

  • fdescribe et fit les fonctions marquées de cette façon de run
  • xdescribe et xitmais les fonctions marquées de cette façon de run
82
répondu Tomek Sułkowski 2016-11-18 18:35:37

configurer test.ts le fichier à l'intérieur de src dossier:

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

Remplacer /\.spec\.ts$/ avec le nom du fichier que vous voulez tester. Par exemple: /app.component\.spec\.ts$/

ceci lancera le test seulement pour app.component.spec.ts.

11
répondu Aish Anu 2018-06-01 05:56:34

j'ai résolu ce problème moi-même en utilisant grunt. J'ai le script grognon ci-dessous. Ce que fait le script, c'est de prendre le paramètre de ligne de commande du test spécifique à exécuter et de créer une copie de test.ts et met ce nom de test.

pour exécuter ceci, installez d'abord grunt-cli en utilisant:

npm install -g grunt-cli

mettez les dépendances grunt ci-dessous dans votre paquet.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"

exécuter enregistrer le ci-dessous grunt fichier Gruntfile.js dans votre dossier racine. Puis, à partir de ligne de commande exécutez - le comme:

grunt --target=app.component

exécuter l'application.composant.specs.ts.

le fichier Grunt est comme suit:

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

};
2
répondu vanval 2017-04-27 22:46:35