2015-04-23 9 views
6

Ich versuche automatische Tests mit Karma zu konfigurieren. Meine Dateistruktur ist wie folgtKarma und RequireJS Dateien außerhalb der Basis-URL

/assests 
/css 
/font 
/img 
/js 
    /collection 
    /lib 
    /model 
    /plugin 
    /spec 
    /view 
    test-main.js 
    main.js 
/templates 
index.html 
karma.conf.js 

karma.conf.js:

module.exports = function(config) { 
    config.set({ 
    // base path that will be used to resolve all patterns (eg. files, exclude) 
    basePath: '', 
    // frameworks to use 
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 
    frameworks: ['jasmine', 'requirejs'], 

    // list of files/patterns to load in the browser 
    files: [ 
    'js/test-main.js', 
     {pattern: 'js/*.js', included: false}, 
     {pattern: 'js/collection/*.js', included: false}, 
     {pattern: 'js/lib/**/*.js', included: false}, 
     {pattern: 'js/lib/**/**/*.js', included: false}, 
     {pattern: 'js/lib/**/**/**/*.js', included: false}, 
     {pattern: 'js/model/*.js', included: false}, 
     {pattern: 'js/model/**/*.js', included: false}, 
     {pattern: 'js/plugin/*.js', included: false}, 
     {pattern: 'js/plugin/**/*.js', included: false}, 
     {pattern: 'js/spec/*.js', included: false}, 
     {pattern: 'js/spec/**/*.js', included: false}, 
     {pattern: 'js/view/**/*.js', included: false}, 
     {pattern: 'js/view/*.js', included: false} 
    ], 


    // list of files to exclude 
    exclude: [ 
     'js/main.js', 
     'js/initScript.js', 
     'js/SpecRunner.js' 
    ], 
    etc. . . 
} 

Test-main.js:

var allTestFiles = []; 
var TEST_REGEXP = /spec/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: '../', 

    // dynamically load all test files 
    deps: allTestFiles, 

    // we have to kickoff jasmine, as it is asynchronous 
    callback: window.__karma__.start, 

    paths: { 
    'jquery' : 'lib/jqm/jquery-1.11.2.min', 
    'underscore' : 'lib/underscore/underscore', 
    'backbone' : 'lib/backbone/backbone',  
    'template' : '../template', 
}, 

    shim : { 
     backbone : { 
      deps : [ 'underscore', 'jquery' ], 
      exports : 'Backbone' 
     } 
    } 
}); 

alle js Dateien Laden funktioniert gut. Das aktuelle Problem ist, dass ich keine Ressourcen außerhalb des Basispfads laden kann.

Also, wenn meine Tests versuchen, eine Vorlage zu holen (die unter '../template/) ist, kann Karma diese Vorlagen nicht finden und schlägt fehl.

Ich kann meinen Basispfad nicht ändern, da sich alle JS-Module unter 'js /' befinden.

Gibt es trotzdem Ressourcen außerhalb des Basispfads zu laden?

Antwort

0

Wie Sie es schrieb sich

// Karma serves files under /base, which is the basePath from your  config file 
baseUrl: '../', 

So bedeutet es, wenn Sie in der Lage sein sollen, auf Dateien zugreifen, die tiefer als die Sie benötigen, mit einem all Ihre URL verschieben:

baseUrl: '../..', 

Sie könnten Verwenden Sie auch base/, die von Karma als BasePath Ihrer KarmaConf.js

verstanden werden. Zum besseren Verständnis, wie die BasePath von Karma.conf und Test-Main.js funktioniert können Sie Schau dir das an: http://monicalent.com/blog/2015/02/11/karma-tests-angular-js-require-j/

Verwandte Themen