2016-04-02 19 views
6

Sto tentando di eseguire un test unitario con copertura (utilizzando karma-coverage) e webpack (utilizzando karma-webpack). I test vengono eseguiti come previsto, ma per generare un report di copertura il file sorgente effettivo (non il test) deve essere caricato e passato attraverso i preprocessori coverage e webpack.Test unitario con karma e webpack: _karma_webpack_ - nessun file o directory

Purtroppo questo non riesce con il seguente errore:

ERROR [karma]: { [Error: no such file or directory] 
    code: 'ENOENT', 
    errno: 34, 
    message: 'no such file or directory', 
    path: '/_karma_webpack_/views/Foo/Foo.js' } 
Error: no such file or directory 

Foo.js è il file che contiene la fonte. Struttura di directory è come questo:

karma.conf.js 
    - src/ 
     - js/ 
     - views/ 
      - Foo/ 
       - Foo.js 
       - test/ 
        - FooTest.js 

karma.conf.js:

module.exports = function (config) { 
    config.set({ 
    basePath: 'src/js/', 

    frameworks: ['jasmine'], 

    files: [ 
     '**/test/*Test.js', 
     '**/Foo.js', 
    ], 

    exclude: [], 

    preprocessors: { 
     '**/test/*Test.js': ['webpack'], 
     '**/Foo.js': ['webpack', 'coverage'], 
    }, 

    coverageReporter: { 
     type: 'html', 
     dir: 'coverage', 
    }, 

    webpack: { 
     resolve: { 
     alias: [ 
      { _karma_webpack_: 'src/js' }, 
     ], 
     }, 

    }, 

    reporters: ['progress', 'coverage'], 

    port: 9876, 

    colors: true, 

    logLevel: config.LOG_DEBUG, 

    autoWatch: true, 

    browsers: ['Chrome'], 

    singleRun: false, 

    concurrency: Infinity, 
    }); 
}; 

Il problema è evidente : il percorso /_karma_webpack_/views/Foo/Foo.js infatti non esiste. Immagino sia un percorso interno, ma come posso cambiarlo?

Come si può vedere, ho già provato a utilizzare l'opzione di risoluzione del pacchetto Web per questo, ma non funziona. Poiché il messaggio di errore indica ERROR [karma], sono anche un po 'preoccupato che questo errore possa essere qualcosa di diverso.

Inoltre, ho avuto il sospetto che forse il modello globbing **/Foo.js è spento, ma cercando alcune modifiche lì (come **/**/Foo.js), inoltre, non ha aiutato.

+4

Il _karma_webpack_' file 'non potrebbe esistere se il vostro pacco non riesce a costruire. Verifica se ci sono errori di sintassi o istruzioni fail()() nel codice di test. Questo problema è solo esacerbato dal fatto che il messaggio di errore del webpack è soppresso. Ho cercato di capire come ottenere karma-webpack per sputare l'esatto errore webpack eseguito in –

+0

Sì @SohanJain questo è successo a me. Tuttavia, l'esecuzione dei miei test localmente ha rivelato un avvertimento relativo al naming-clash del modulo edge-case, che è stato soppresso durante l'esecuzione dei miei test da remoto su Travis. –

risposta

9

Ho avuto lo stesso problema. Risulta, avevo bisogno di uscire dalla cartella karma_webpack, così invece di

preprocessors: { 
    '**/test/*Test.js': ['webpack'], 
    '**/Foo.js': ['webpack', 'coverage'], 
}, 

provare

preprocessors: { 
    '../**/test/*Test.js': ['webpack'], 
    '../**/Foo.js': ['webpack', 'coverage'], 
},