2015-05-05 18 views
14

JavaScript birim testlerimiz için Jasmine kullanıyoruz. Testleri çalıştırmak için bir SpecRunner.html dosyanız var. SpecRunner.html yolunu ve JavaScript (spec değil) dosyalarının dizin yolunu iletebileceğim bir araç var ve bir LCOV raporu oluşturur. Böyle Örneğin, bir şey:Jasmine'in SpecRunner.html'sine dayanan LCOV raporu nasıl oluşturulur?

phantomjs jasmine_lcov.js SpecRunner.html WebContent/js 

cevap

-1

Biz Karma kullandığınız hırıltı üzerinde yapılandırma benziyor:

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 
       } 
      } 
     } 
} 

Eğer

SpecRunner.js belirtmeyen

ancak tüm spec dosyalarınız için * .js belirtebilirsiniz.

Eğer gösterdi benzer Raporunuzu üretecektir

hırıltı karma

ile çalıştırabilirsiniz.

7

@zaabalonso'ya katılıyorum ki Karma doğru seçimdir. LCOV raporları istediğiniz için, karma-coverage eklentisine de ihtiyacınız olacak ve CI'da başsız çalışmak istediğinizi varsayarak muhtemelen karma-phantomjs-launcher'u isteyeceksiniz. Karma-cli (npm install -g karma-cli) ile her zaman karma komut satırından doğrudan çalıştırabildiğinizden Grunt ile koşmak isteğe bağlıdır. (RequireJS ile)

bir temel kurulum şöyle görünür:

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 (preprocessors ve coverageReporter bölümlerini dikkat

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

module.exports = function(grunt) { 
    grunt.initConfig({ 
    karma: { 
     unit: { 
     configFile: 'karma.conf.js', 
     options: { 
      singleRun: true 
     } 
     } 
    } 
    }); 
    grunt.loadNpmTasks('grunt-karma'); 
    grunt.registerTask('default', ['karma:unit']); 
}; 

Sen karma start ile testler komut satırı çalıştırabilirsiniz (eğer Grunt kullanmak istiyorsanız İsteğe bağlı). Bu karma sunucuyu başlatacak ve testleri bir kez gerçekleştirecek. Sunucunuzu güncel tutacak ve kaynaklarınızı veya test kaynaklarınızı değiştirdiğinizde testleri yeniden çalıştıracaktır. Eğer testi sadece bir kez (CI'de) çalıştırmak istiyorsanız, sadece karma start --single-run'u çalıştırın. Aynı zamanda bunu yapacak

+1

Bu iyi bir çözümdür, ancak aslında test etmek için bir NODE envim var, bu yüzden testi çalıştırmak için bir tarayıcı kullanabilirim, bu yüzden bunu Karma olmadan yapmam gerekiyor, bunu yapmak için herhangi bir yol biliyor musunuz? –

1

Chutzpah. Bununla birlikte, Windows platformuna odaklanır, böylece sizin için çalışabilir veya olmayabilir.İşte tam komut satırı seçenekleri documentation olmakla komut böyle bir şey olabilir:

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

vb kapsama dışlayan veya referanslar gibi ayar şeyleri ince gerekiyorsa, bölgede json yapılandırma dosyaları yerleri kullanabilirsiniz Testler, here tarif edildiği gibidir. SpecRunner.html dosyasındaki referanslar tarafından otomatik olarak algılanan komut satırında test altında Javascript kodunuzun yerini belirlemenize gerek yoktur.

Chutzpah'ın çok kaygan ve kullanımı kolay olduğunu buldum.

İlgili konular