I Knoten Bibliotheken zu versuchen bin wachsenden müde zu bekommen richtig zusammen zu arbeiten ... aber es ist ein Teil der Arbeit, geht so hier ...Wie kommt man browserify, babel, und die Abdeckung zusammen in Karma arbeiten
Ich habe eine ES6-Anwendung für einen Browser. Ich habe eine Reihe von Komponententests für meine Dateien erstellt, die ich erstellt habe, als meine Anwendung in ES5 geschrieben wurde. Ich verwende browserify, um Module zu importieren/exportieren und meine Distribution zu bündeln. Dies funktioniert einwandfrei, wenn Sie die Anwendung im Browser ausführen. Ich kann die Quell- und Spezifikationsdateien erfolgreich browsen und die Tests durchführen, und die Tests bestehen. Ich bin sehr, sehr nah daran, das zu schaffen.
Das einzige Problem ist die Abdeckung. Der nächstgelegene ich gekommen ist Berichterstattung über die Karma-browserify zeigt generierten Dateien, die jeweils wie folgt aussehen:
require('/absolute/path/to/the/corresponding/file.js');
und die Abdeckung zeigt offensichtlich als 100% für alle Dateien, weil jeder nur eine Zeile ist.
Das ist mein karma.conf.js:
import babelify from 'babelify';
import isparta from 'isparta';
import paths from './paths';
var normalizeBrowserName = (browser) => browser.toLowerCase().split(/[ /-]/)[0];
export default function(config) {
config.set({
basePath: '..',
browsers: ['PhantomJS'],
frameworks: ['browserify', 'jasmine'],
files: paths.test.files,
preprocessors: {
'app/**/*.js': ['browserify', 'sourcemap', 'coverage'],
[paths.test.testFiles]: ['babel'],
},
plugins: [
'karma-babel-preprocessor',
'karma-browserify',
'karma-coverage',
'karma-jasmine',
'karma-junit-reporter',
'karma-phantomjs-launcher',
'karma-sourcemap-loader',
],
autoWatch: false,
colors: false,
loggers: [{ type: 'console' }],
port: 9876,
reporters: ['progress', 'dots', 'junit', 'coverage'],
junitReporter: {
outputFile: paths.test.resultsOut,
suite: '',
},
browserify: {
debug: true,
noParse: paths.js.noparse(),
configure: (bundle) => {
bundle.once('prebundle',() => bundle.transform(babelify.configure({ ignore: 'lib/!**!/!*' })));
},
},
coverageReporter: {
instrumenters: { isparta },
instrumenter: {
[paths.test.cover]: 'isparta',
},
reporters: [
{ type: 'text', },
{ type: 'html', dir: paths.test.coverageOut, subdir: normalizeBrowserName },
{ type: 'cobertura', dir: paths.test.coverageOut, subdir: '.', file: 'coverage.xml' },
],
},
logLevel: config.LOG_DEBUG,
});
};
ich wirklich keine Ahnung, wie jeder dieser Bibliotheken arbeiten, so dass ich weiß nicht, wo in dem Debuggen dieses zu starten. Ich verstehe, dass die Reihenfolge der Preprozessoren von Bedeutung ist, so dass browserify auf den Quelldateien läuft, die resultierenden Link-Dateien in den Quellkartengenerator einspeist und der Quellkartengenerator dann das resultierende alles in Karma-Coverage einspeist. Aber es gibt einen Kommunikationsverlust zwischen browserify und allem, was mit der Abdeckung zu tun hat. Isparta (die Istanbul hinter den Kulissen verwendet) hat keine Ahnung, dass browserify läuft, und ich weiß nicht, was es sieht.
Ich bin an diesem Punkt weitschweifig, weil ich im Ernst nicht weiß, wie etwas von diesem Zeug funktioniert.
Wenn jemand Erfahrung mit dem Testen modularisierter ES6 MIT richtiger Codeabdeckung hat, lass es mich wissen, wenn ich auf dem richtigen Weg bin oder etwas anderes ausprobieren sollte.
Ich bekomme die HTML-Ausgabe komprimiert, auszuschließen/zu importieren, also jedes Mal sagt es alle Dateien haben Tests, wenn es nicht wahr ist. Alle Dateien im HTML-Bericht enthalten 'typeof require ===" function "&& require (MY-FILE)' – Cyberdelphos