Жасмин с глотком, запустить тесты на тестовый файл изменен

Привет, что я пытаюсь сделать, это сделать 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...');
});
Другие вопросы по тегам