The other day I could not find an acceptable Karma task for Gulp, so I spent
some time on my own. Using Karma ~1.3.0
and Gulp ~3.9.0
.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Run test once and exit | |
*/ | |
gulp.task('test', function (done) { | |
var karmaServer = new karma.Server({ | |
configFile: __dirname + '/test/karma.conf.js', | |
singleRun: true | |
}, function (exitCode) { | |
done(); | |
process.exit(exitCode); | |
}).start(); | |
}); | |
/** | |
* Run tests in chrome browser | |
*/ | |
gulp.task('test:chrome', function (done) { | |
var karmaServer = new karma.Server({ | |
configFile: __dirname + '/test/karma.conf.js', | |
browsers: ['Chrome'] | |
}, function (exitCode) { | |
done(); | |
process.exit(exitCode); | |
}).start(); | |
}); | |
/** | |
* Watch for file changes and re-run tests on each change | |
*/ | |
gulp.task('tdd', function (done) { | |
var karmaServer = new karma.Server({ | |
configFile: __dirname + '/test/karma.conf.js' | |
}, function () { | |
done(); | |
}).start(); | |
}); | |
process.exit
will stop the task, preventing weird error messages from
Gulp. I think Karma calls the complete method for each test file? I don’t know, either way it
makes the two dance well together.
One more thing, just a warning do not refactor the last task to match.
var karmaServer = new karma.Server({
configFile: __dirname + '/test/karma.conf.js'
}, done).start();
There is an integration problem where Gulp will try to read the arguments sent
into the done()
method. More about this pestering issue here.