带有 gulp、运行 测试文件的茉莉花已更改
jasmine with gulp, run tests on test file changed
嗨,我想做的是用 gulp
制作 watcher task
,这将 运行 我的茉莉花测试。到目前为止我做了什么:
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
也许我错过了什么?
分两步完成
1) 声明测试单元任务(就像您所做的那样)
gulp.task('tests.run', function () {
return gulp.src(testsFiles)
.pipe(jasmine({verbose:true}));
});
2) 当 testsFiles
改变
时声明将 运行 这个测试单元任务的 watch 任务
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...');
});
为了 运行 只需要规格,尝试这样的事情:
/** 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);
}
}
}
});
});
这个watcher使用了两个函数,一个是根据文件名推导出spec名称。就我而言,它是:
/**
* 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
,其中运行s jasmine 带有给定的测试文件。
只要让一切都适合您的设置,它就会工作。 :-)
嗨,我想做的是用 gulp
制作 watcher task
,这将 运行 我的茉莉花测试。到目前为止我做了什么:
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
也许我错过了什么?
分两步完成
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
您可以通过以下方式监听测试和源代码文件夹的文件更改:
"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...');
});
为了 运行 只需要规格,尝试这样的事情:
/** 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);
}
}
}
});
});
这个watcher使用了两个函数,一个是根据文件名推导出spec名称。就我而言,它是:
/**
* 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
,其中运行s jasmine 带有给定的测试文件。
只要让一切都适合您的设置,它就会工作。 :-)