webpack css-loader 无法按预期使用 karma

webpack css-loader doesn't work as expected with karma

我正在使用 css-loader Local Scope 功能,但遇到了一些问题。 我正在为 Vue.js 编写指令。 该指令正在导入一个 scss 文件,并使用加载程序创建的导出的 classes 将其分配给指令正在创建的某些元素。 这在我为 prod/dev 构建时有效,但是当我为 test 构建时它不起作用。 我导入我的指令文件,并通过使用 jQuery 创建一个 dom 元素来测试其中一个指令函数,然后将其分配给导出的 class 和 css-loader。我使用 karma 进行测试,所以当我在浏览器中启动 karma 服务器来调试测试时,我看到元素被分配了 classes,但它们没有任何样式。我怀疑我的 test 环境的 webpack 配置有问题。 这是我的 webpack 我的 test 环境配置:

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

然后我将它与 karma 配置文件一起使用:

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

这是我的指令,导入 scss 文件:

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

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

然后我在测试中使用它为测试创建的 dom 元素分配 classes:

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

因此 classes 已分配,但我没有看到 webpackExtractTextPlugin 中指定的任何 style.css 和我的样式,也没有任何样式实际上应用于我测试创建的 dom 元素。有人知道我做错了什么吗?

显然 not supported。 我使用样式加载器代替我的测试。