2016-10-24 1 views
1

Ich benutze css-loaderLocal Scope Funktion, und ein bisschen Ärger damit. Ich schreibe eine Direktive für Vue.js. Diese Direktive importiert eine scss Datei und verwendet die exportierten Klassen, die vom Loader erstellt wurden, um sie einigen Elementen zuzuweisen, die die Direktive erstellt. Das funktioniert, wenn ich für prod/dev baue, aber wenn ich für test baue, funktioniert es nicht. Ich importiere meine Anweisungsdatei und teste eine der Anweisungsfunktionen, indem ich ein dom-Element unter Verwendung von jQuery erstelle, und weise ihm dann die exportierte Klasse css-loader zu. Ich verwende karma zum Testen, also wenn ich den karma Server in meinem Browser starte, um den Test zu debuggen, sehe ich, dass die Elemente den Klassen zugewiesen sind, aber sie haben keinerlei Styling. Ich vermute, dass meine webpack Konfiguration für meine test Umgebung ist schuld. Das ist mein webpack Config für meine test Umgebung:webpack css-loader funktioniert nicht wie erwartet mit karma

const ExtractTextPlugin = require('extract-text-webpack-plugin'); 

module.exports = { 
    module: { 
    preLoaders: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'eslint' 
     } 
    ], 
    loaders: [ 
     { 
     test: /.json$/, 
     loader: 'json' 
     }, 
     { 
     test: /\.(css|scss)$/, 
     loaders: ExtractTextPlugin.extract({ 
      fallbackLoader: 'style', 
      loader: 'css!sass!postcss' 
     }) 
     }, 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'babel' 
     }, 
     { 
     test: /.vue$/, 
     loader: 'vue' 
     } 
    ] 
    }, 
    plugins: [ 
    new ExtractTextPlugin("style.css") 
    ], 
    vue: { 
    loaders: { 
     sass: ExtractTextPlugin.extract("css!sass") 
    } 
    }, 
    debug: true, 
    devtool: 'source-map' 
}; 

Und ich benutze es dann mit Karma-Konfigurationsdatei:

const conf = require('./gulp.conf'); 

module.exports = function (config) { 
    const configuration = { 
    basePath: '../', 
    singleRun: false, 
    autoWatch: true, 
    logLevel: 'INFO', 
    junitReporter: { 
     outputDir: 'test-reports' 
    }, 
    browsers: [ 
     'PhantomJS' 
    ], 
    frameworks: [ 
     'jasmine' 
    ], 
    files: [ 
     'node_modules/es6-shim/es6-shim.js', 
     conf.path.src('app.spec.js') 
    ], 
    preprocessors: { 
     [conf.path.src('app.spec.js')]: [ 
     'webpack' 
     ] 
    }, 
    reporters: ['progress', 'coverage'], 
    coverageReporter: { 
     type: 'html', 
     dir: 'coverage/' 
    }, 
    webpack: require('./webpack-test.conf'), 
    webpackMiddleware: { 
     noInfo: true 
    }, 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-junit-reporter'), 
     require('karma-coverage'), 
     require('karma-phantomjs-launcher'), 
     require('karma-phantomjs-shim'), 
     require('karma-webpack') 
    ] 
    }; 

    config.set(configuration); 
}; 

Hier ist meine Richtlinie, die SCSS-Datei importieren:

import classes from '../../css/directives/tooltip.scss'; 

const TOOLTIP_CLASS = classes.tooltip; 
const TOOLTIP_ARROW_CLASS = classes.arrow; 

Und dann verwende ich es in meinem Test, um die Klassen für test created dom Elemente zuzuweisen:

... 
const $arrow = $(document.createElement('span')); 
$arrow.addClass(TooltipRewireAPI.__get__('TOOLTIP_ARROW_CLASS')); 
... 

So werden die Klassen zugeordnet, aber ich sehe nicht, jede style.css wie in der mit meinem Arten ExtractTextPlugin von webpack angegeben, und es werden keine Stile sind eigentlich zu meinem Test erstellt dom Elemente angewendet. Jeder hat eine Idee, was habe ich falsch gemacht?

Antwort

Verwandte Themen