2015-05-05 8 views
14

Usiamo Jasmine per i nostri test di unità JavaScript. Abbiamo un file SpecRunner.html per eseguire i test. Esiste uno strumento per il quale posso passare il percorso a SpecRunner.html e il percorso alla directory dei file JavaScript (non alle specifiche) e genererebbe un report LCOV. Per esempio, qualcosa di simile:Come generare un report LCOV basato su SpecRunner.html di Jasmine?

phantomjs jasmine_lcov.js SpecRunner.html WebContent/js 

risposta

-1

Stiamo usando Karma sopra grugnito la configurazione si presenta così:

options = { 
     karma: { 
      unit: { 
       options: { 
        files: ['test/unit/specs/*.js'], 
        reporters: ['progress', 'coverage'], 
        preprocessors: { 
         'src/js/*.js': ['coverage'] 
        }, 
        coverageReporter: { 
         type : 'html', 
         dir : 'build/coverage/' 
        }, 
        frameworks: ['jasmine'], 
        singleRun: true 
       } 
      } 
     } 
} 

non si specifica i SpecRunner.js

ma è possibile specificare * .js per tutti i file spec.

è possibile eseguirlo con

grugnito karma

che genererà il rapporto simile a quello che avete mostrato.

7

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.

+1

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? –

1

Chutzpah farà anche questo. Si concentra tuttavia sulla piattaforma Windows, in modo che possa o meno funzionare per te.Ecco le opzioni della riga di comando completa documentation, ma il vostro comando potrebbe essere qualcosa di simile:

chutzpah.console.exe SpecRunner.html /coverage /lcov coverage.dat 

Se avete bisogno di multare sintonizzare le cose come esclude la copertura o riferimenti, ecc, è possibile utilizzare JSON file di configurazione posti nella zona dove i test sono come descritti here. Non è necessario specificare la posizione del codice Javascript sotto test sulla riga di comando poiché viene rilevato automaticamente dai riferimenti in SpecRunner.html.

Ho trovato che Chutzpah è molto lucido e facile da usare.

Problemi correlati