Жасмин с глотком, запустить тесты на тестовый файл изменен
Привет, что я пытаюсь сделать, это сделать 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
Может я что то пропустил?
3 ответа
Чтобы запустить только необходимые спецификации, попробуйте что-то вроде этого:
/** 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
, который запускает жасмин с заданным тестовым файлом.
Просто сделайте все в соответствии с вашими настройками, и это должно работать.:-)
Сделать это в два этапа
1) Объявите задачу test-unit (как вы сделали)
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
Вы можете прослушать изменения файлов как для тестов, так и для папок с исходным кодом:
"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...');
});