2015-04-23 9 views
6

Sto provando a configurare il test automatico utilizzando il karma. La mia struttura dei file è la seguenteKarma e RequireJS recuperare i file dall'URL di base

/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' 
     } 
    } 
}); 

Caricamento tutti i file js funziona bene. Il problema attuale è che non riesco a caricare alcuna risorsa al di fuori del percorso di base.

Così quando i miei test tentano di recuperare un modello (che si trova in '../template/) karma non riesce a trovare quei modelli e fallisce.

Non riesco a modificare il percorso di base perché tutti i moduli JS sono in "js /".

Esiste comunque un modo per caricare risorse al di fuori del percorso di base?

risposta

0

Come avete scritto voi stessi

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

Quindi significa che se si vuole essere in grado di accedere ai file più profondo di quello è necessario spostare tutte le tue URL con un:

baseUrl: '../..', 

Si potrebbe usa anche base/ che sarà compreso da karma come basePath del tuo karmaConf.js

Per una migliore comprensione di come funziona il metodo base di karma.conf e test-main.js puoi dai un'occhiata a questo: http://monicalent.com/blog/2015/02/11/karma-tests-angular-js-require-j/