Sono d'accordo con @zaabalonso che Karma è la scelta corretta. Dal momento che vuoi i report LCOV, avrai anche bisogno del plug-in karma-coverage e presumendo che tu voglia eseguire headless in CI probabilmente vorrai lo karma-phantomjs-launcher. L'esecuzione di Grunt è facoltativa poiché puoi sempre eseguire karma direttamente dalla riga di comando con karma-cli (npm install -g karma-cli
).
Una configurazione di base (con requireJS) simile a questa:
package.json
{
"private": "true",
"devDependencies": {
"grunt": "^0.4.5",
"grunt-jasmine-node": "^0.3.1",
"grunt-karma": "^0.10.1",
"jasmine-core": "^2.3.4",
"karma": "^0.12.32",
"karma-coverage": "^0.3.1",
"karma-jasmine": "^0.3.5",
"karma-phantomjs-launcher": "^0.1.4",
"karma-requirejs": "^0.2.2",
"requirejs": "^2.1.17"
}
}
karma.conf.js (Notare le preprocessors
e coverageReporter
sezioni
module.exports = function(config) {
config.set({
basePath: '.',
frameworks: ['jasmine', 'requirejs'],
files: [{
pattern: 'src/**/*.js',
included: false
}, {
pattern: 'spec/**/*.js',
included: false
},
"test-main.js"],
preprocessors: {
'src/**/*.js': ['coverage']
},
reporters: ['progress', 'coverage'],
coverageReporter: {
// specify a common output directory
dir: 'build/reports/coverage',
reporters: [
{ type: 'lcov', subdir: 'report-lcov' },
{ type: 'lcovonly', subdir: '.', file: 'report-lcovonly.txt' }
]
},
browsers: ['PhantomJS']
});
};
test-main.j s
var allTestFiles = [];
var TEST_REGEXP = /^\/base\/spec\/\S*(spec|test)\.js$/i;
var pathToModule = function (path) {
return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};
Object.keys(window.__karma__.files).forEach(function (file) {
if (TEST_REGEXP.test(file)) {
// Normalize paths to RequireJS module names.
allTestFiles.push(pathToModule(file));
}
});
require.config({
// Karma serves files under /base, which is the basePath from your config file
baseUrl: '/base/',
enforceDefine: true,
xhtml: false,
waitSeconds: 30,
// dynamically load all test files
deps: allTestFiles,
callback: window.__karma__.start
});
Gruntfile.js (opzionale se si desidera utilizzare Grunt)
module.exports = function(grunt) {
grunt.initConfig({
karma: {
unit: {
configFile: 'karma.conf.js',
options: {
singleRun: true
}
}
}
});
grunt.loadNpmTasks('grunt-karma');
grunt.registerTask('default', ['karma:unit']);
};
è possibile eseguire il test di riga di comando con karma start
. Questo lancerà il server karma ed eseguirà i test una volta. Manterrà il server attivo ed eseguirà nuovamente i test ogni volta che modifichi la fonte o le origini di test. Se si desidera eseguire il test solo una volta (in CI, forse), è sufficiente eseguire karma start --single-run
.
Questa è una buona soluzione, ma in realtà ho un env NODE da testare, quindi posso usare un browser per eseguire il test, quindi ho bisogno di farlo senza Karma, conosci qualche modo per farlo? –