6
6
var _ = require ( 'lodash' ) ,
7
7
defaultAssets = require ( './config/assets/default' ) ,
8
8
testAssets = require ( './config/assets/test' ) ,
9
+ glob = require ( 'glob' ) ,
9
10
gulp = require ( 'gulp' ) ,
10
11
gulpLoadPlugins = require ( 'gulp-load-plugins' ) ,
11
12
runSequence = require ( 'run-sequence' ) ,
@@ -16,6 +17,7 @@ var _ = require('lodash'),
16
17
} ) ,
17
18
path = require ( 'path' ) ,
18
19
endOfLine = require ( 'os' ) . EOL ,
20
+ argv = require ( 'yargs' ) . argv ,
19
21
protractor = require ( 'gulp-protractor' ) . protractor ,
20
22
webdriver_update = require ( 'gulp-protractor' ) . webdriver_update ,
21
23
webdriver_standalone = require ( 'gulp-protractor' ) . webdriver_standalone ,
@@ -66,6 +68,35 @@ gulp.task('watch', function () {
66
68
gulp . watch ( defaultAssets . server . gulpConfig , [ 'jshint' ] ) ;
67
69
gulp . watch ( defaultAssets . client . views ) . on ( 'change' , plugins . livereload . changed ) ;
68
70
}
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
+ }
69
100
} ) ;
70
101
71
102
// CSS linting task
@@ -181,13 +212,14 @@ gulp.task('templatecache', function () {
181
212
gulp . task ( 'mocha' , function ( done ) {
182
213
// Open mongoose connections
183
214
var mongoose = require ( './config/lib/mongoose.js' ) ;
215
+ var testSuites = Array . isArray ( argv . changedTestFiles ) && argv . changedTestFiles . length ? argv . changedTestFiles : testAssets . tests . server ;
184
216
var error ;
185
217
186
218
// Connect mongoose
187
219
mongoose . connect ( function ( ) {
188
220
mongoose . loadModels ( ) ;
189
221
// Run the tests
190
- gulp . src ( testAssets . tests . server )
222
+ gulp . src ( testSuites )
191
223
. pipe ( plugins . mocha ( {
192
224
reporter : 'spec' ,
193
225
timeout : 10000
@@ -275,6 +307,14 @@ gulp.task('test:server', function (done) {
275
307
runSequence ( 'env:test' , 'lint' , 'mocha' , done ) ;
276
308
} ) ;
277
309
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
+
278
318
gulp . task ( 'test:client' , function ( done ) {
279
319
runSequence ( 'env:test' , 'lint' , 'karma' , done ) ;
280
320
} ) ;
0 commit comments