2016-04-02 13 views
6

Ich versuche, einen Unit-Test mit Abdeckung (mit karma-coverage) und Webpack (mit karma-webpack). Die Tests werden wie erwartet ausgeführt, aber um einen Abdeckungsbericht zu erstellen, muss die tatsächliche Quelldatei (nicht der Test) geladen und über die Präprozessoren coverage und webpack weitergeleitet werden.Unit-Test mit Karma und Webpack: _karma_webpack_ - keine solche Datei oder Verzeichnis

Leider scheitert dies mit dem folgenden Fehler:

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 die Datei, die die Quelle enthält. Directory-Struktur ist wie folgt:

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, 
    }); 
}; 

Das Problem ist offensichtlich: Der Weg /_karma_webpack_/views/Foo/Foo.js in der Tat gibt es nicht. Ich denke, es ist ein interner Pfad, aber wie kann ich das ändern?

Wie Sie sehen können, habe ich bereits versucht, die Option zum Auflösen des Webpacks zu verwenden, aber es funktioniert nicht. Da die Fehlermeldung ERROR [karma] lautet bin ich auch ein bisschen besorgt, dass dieser Fehler etwas anderes sein könnte.

Auch hatte ich den Verdacht, dass vielleicht das Globbing-Muster **/Foo.js ausgeschaltet ist, aber einige Änderungen versuchen, wie (**/**/Foo.js) half auch nicht.

+4

Die '_karma_webpack_' Datei möglicherweise nicht vorhanden, wenn Ihr Paket bauen ausfällt. Sehen Sie nach, ob Sie Syntaxfehler oder fehlgeschlagene request() -Anweisungen in Ihrem Testcode haben. Dieses Problem wird nur noch dadurch verschärft, dass die Webpack-Fehlermeldung unterdrückt wird. Ich habe versucht herauszufinden, wie man Karma-Webpack den genauen Fehler auszuspucken bekommt, der Webpack läuft –

+0

Ja @SohanJain das ist mir passiert. Bei der lokalen Ausführung meiner Tests wurde jedoch eine Edge-Case-Warnung für die Modulbenennung angezeigt, die bei der Remote-Ausführung meiner Tests auf Travis unterdrückt wurde. –

Antwort

9

Ich hatte das gleiche Problem. Es stellte sich heraus, musste ich aus dem karma_webpack Ordner erhalten, so dass anstelle von

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

versuchen

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