webpack css-loader не работает должным образом с karma

#javascript #build #webpack #karma-runner #css-loader

#javascript #сборка #webpack #karma-runner #css-загрузчик

Вопрос:

Я использую функцию css-loader Local Scope , и у меня возникли небольшие проблемы с ней. Я пишу директиву для Vue.js . Эта директива импортирует scss файл и использует экспортированные классы, созданные загрузчиком, для присвоения его некоторым элементам, создаваемым директивой. Это работает, когда я создаю для prod/dev , но когда я создаю для test , это не работает. Я импортирую свой файл директивы и тестирую одну из функций директивы, создавая элемент dom с помощью jQuery , а затем присваиваю ему класс, который css-loader экспортирован. Я использую karma для тестирования, поэтому, когда я запускаю karma сервер в своем браузере для отладки теста, я вижу, что элементам присвоены классы, но у них нет никакого стиля вообще. Я подозреваю, что моя webpack конфигурация для моей test среды неисправна. Это моя 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:

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

Итак, классы назначены, но я не вижу ничего style.css подобного, указанного в ExtractTextPlugin из webpack с моими стилями, и никакие стили на самом деле не применяются к моим тестовым элементам dom, созданным. У кого-нибудь есть идея, что я сделал не так?

Ответ №1:

По-видимому, не поддерживается. Вместо этого я использовал style loader для своих тестов.