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.
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
etfit
les fonctions marquées de cette façon de runxdescribe
etxit
mais les fonctions marquées de cette façon de run
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
.
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']);
};