2015-08-30 1 views
2

Привет, что я пытаюсь сделать, это сделать watcher task с gulp, который будет запускать мои тесты на жасмин. То, что я сделал до сих пор:жасмин с глотком, тесты на тестовый файл изменены

var watch = require("gulp-watch"); 
var jasmine = require("gulp-jasmine"); 

gulp.task('tests.run.change-watcher', function (cb) { 
    gulp.src(testsFiles) 
     .pipe(watch(testsFiles)) 
     .pipe(jasmine({ verbose: true })); 
}); 

Но когда я запускаю эту задачу и попытаться изменить любой файл, который отвечает testsFiles правил не показывает ничего в консоли.

Однако, когда я запускаю следующую задачу:

gulp.task('tests.run', function (cb) { 
    gulp.src(testsFiles) 
     .pipe(jasmine({verbose:true})); 
}); 

Она работает и показывает следующий: 8 specs, 0 failures Finished in 0 seconds

Может быть, я что-то пропустила?

ответ

4

ли это в два этапа

1) Объявить задачу тест-блок (как вы это делали)

gulp.task('tests.run', function() { 
    return gulp.src(testsFiles) 
     .pipe(jasmine({verbose:true})); 
}); 

2) Объявить часовую задачу, которая будет запускать этот тест-блок задачи, когда те testsFiles изменить

gulp.task('tests.watch', function() { 
    gulp.watch(testsFiles, ['tests.run']); 
}); 

Затем запустите gulp tests.watch

+0

В этом случае он будет запускать все тесты даже для одного смены файла. Но я хочу запустить тесты в файле, который был изменен только. – Maris

1

вы ча п слушать изменения файлов для обоих тестов и папки исходного кода с этим:

"use strict"; 

var gulp = require('gulp'); 
var mocha = require('gulp-mocha'); 
var batch = require('gulp-batch'); 

gulp.watch(['tests/**', 'src/**'], batch(function (events, cb) { 
    return gulp.src(['tests/*.js']) 
     .pipe(jasmine({ verbose: true })) 
     .on('error', function (err) { 
      console.log(err.stack); 
     }); 
})); 

gulp.task('default',() => { 
    console.log('Gulp is watching file changes...'); 
}); 
0

Чтобы запустить только необходимые функции, попробовать что-то вроде этого:

/** Watches file changes in source or spec files and executes specs automatically */ 
gulp.task("specs-watcher", function() { 
    return watch(["src/**/*.ts", "spec/**/*.ts"], { events: ["add", "change"] }, function(vinyl, event) { 
    if (!vinyl.isDirectory()) { 
     if (vinyl.basename.endsWith(".spec.ts")) { 
     // We are dealing with a spec file here, so call jasmine! 
     runJasmine(vinyl.path); 
     } else { 
     // Try to find out specs file 
     const specFilePath = findSpecsFile(vinyl); 
     if (typeof specFilePath === "string") { 
      runJasmine(specFilePath); 
     } 
     } 
    } 
    }); 
}); 

Этот наблюдатель использует две функции, одна для получения имя спецификации на основе имени файла. В моем случае это:

/** 
* For your specs-watcher: This function is called every time a file changed which doesn't end with '.spec.ts'. 
* The function's task is to return the fitting specs path of this file. For example by looking for a corresponding file in the "/spec/" folder. 
* @param {vinyl} changedFile Vinyl object of changed file (see https://github.com/gulpjs/vinyl) 
* @return {string|undefined} Path to the specs file to execute or undefined if your watcher shouldn't do anything. 
*/ 
function findSpecsFile(changedFile) { 
    return changedFile.path.replace(__dirname, `${__dirname}/spec`).replace(".ts", ".spec.ts"); 
} 

Другая функция runJasmine, которая проходит жасмин с данным тестовым файлом.

Просто сделайте все подходящим для вашей установки, и оно должно работать. :-)

 Смежные вопросы

  • Нет связанных вопросов^_^