Skip to content
This repository was archived by the owner on Aug 30, 2021. It is now read-only.

Commit 7e8d2ed

Browse files
committed
Merge pull request #1083 from mleanos/feature/Gulp-TestWatch-Server
feat(config): Gulp Server Watch for Mocha
2 parents b51e645 + bf2eeed commit 7e8d2ed

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

gulpfile.js

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
var _ = require('lodash'),
77
defaultAssets = require('./config/assets/default'),
88
testAssets = require('./config/assets/test'),
9+
glob = require('glob'),
910
gulp = require('gulp'),
1011
gulpLoadPlugins = require('gulp-load-plugins'),
1112
runSequence = require('run-sequence'),
@@ -16,6 +17,7 @@ var _ = require('lodash'),
1617
}),
1718
path = require('path'),
1819
endOfLine = require('os').EOL,
20+
argv = require('yargs').argv,
1921
protractor = require('gulp-protractor').protractor,
2022
webdriver_update = require('gulp-protractor').webdriver_update,
2123
webdriver_standalone = require('gulp-protractor').webdriver_standalone,
@@ -66,6 +68,35 @@ gulp.task('watch', function () {
6668
gulp.watch(defaultAssets.server.gulpConfig, ['jshint']);
6769
gulp.watch(defaultAssets.client.views).on('change', plugins.livereload.changed);
6870
}
71+
72+
if (process.env.NODE_ENV === 'test') {
73+
// Add Server Test file rules
74+
gulp.watch([testAssets.tests.server, defaultAssets.server.allJS], ['test:server']).on('change', function (file) {
75+
var runOnlyChangedTestFile = argv.onlyChanged ? true : false;
76+
77+
// check if we should only run a changed test file
78+
if (runOnlyChangedTestFile) {
79+
var changedTestFiles = [];
80+
81+
// iterate through server test glob patterns
82+
_.forEach(testAssets.tests.server, function (pattern) {
83+
// determine if the changed (watched) file is a server test
84+
_.forEach(glob.sync(pattern), function (f) {
85+
var filePath = path.resolve(f);
86+
87+
if (filePath === path.resolve(file.path)) {
88+
changedTestFiles.push(f);
89+
}
90+
});
91+
});
92+
93+
// set task argument for tracking changed test files
94+
argv.changedTestFiles = changedTestFiles;
95+
}
96+
97+
plugins.livereload.changed();
98+
});
99+
}
69100
});
70101

71102
// CSS linting task
@@ -181,13 +212,14 @@ gulp.task('templatecache', function () {
181212
gulp.task('mocha', function (done) {
182213
// Open mongoose connections
183214
var mongoose = require('./config/lib/mongoose.js');
215+
var testSuites = Array.isArray(argv.changedTestFiles) && argv.changedTestFiles.length ? argv.changedTestFiles : testAssets.tests.server;
184216
var error;
185217

186218
// Connect mongoose
187219
mongoose.connect(function () {
188220
mongoose.loadModels();
189221
// Run the tests
190-
gulp.src(testAssets.tests.server)
222+
gulp.src(testSuites)
191223
.pipe(plugins.mocha({
192224
reporter: 'spec',
193225
timeout: 10000
@@ -275,6 +307,14 @@ gulp.task('test:server', function (done) {
275307
runSequence('env:test', 'lint', 'mocha', done);
276308
});
277309

310+
// Watch all server files for changes & run server tests (test:server) task on changes
311+
// optional arguments:
312+
// --onlyChanged - optional argument for specifying that only the tests in a changed Server Test file will be run
313+
// example usage: gulp test:server:watch --onlyChanged
314+
gulp.task('test:server:watch', function (done) {
315+
runSequence('test:server', 'watch', done);
316+
});
317+
278318
gulp.task('test:client', function (done) {
279319
runSequence('env:test', 'lint', 'karma', done);
280320
});

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
"mock-fs": "~3.4.0",
117117
"run-sequence": "^1.1.1",
118118
"should": "^7.0.1",
119-
"supertest": "^1.0.1"
119+
"supertest": "^1.0.1",
120+
"yargs": "~3.30.0"
120121
}
121122
}

0 commit comments

Comments
 (0)