从命令行/ npm脚本运行文件更改时的karma

时间:2017-08-09 14:40:45

标签: javascript node.js karma-mocha npm-scripts

我为使用karma& amp;设置的应用设置进行单元测试摩卡&通过伊斯坦布尔报道。

npm脚本:

"test": "cross-env BABEL_ENV=test karma start tests/karma.conf.js --single-run",

我想要做的是在开发过程中运行一个脚本来观察测试&应用程序文件进行更改并根据需要重新运行测试。

我尝试将--single-run替换为--auto-watch

"test:watch": "cross-env BABEL_ENV=test karma start tests/karma.conf.js --auto-watch",

但这会不断重复 - 一旦完成一轮测试,它就会重新开始。

karma.conf.js:

var webpackConfig = require('../build/webpack.conf.test');

module.exports = function (config) {
  config.set({
    browsers: ['PhantomJS'],
    frameworks: ['mocha', 'sinon-chai', 'phantomjs-shim'],
    reporters: ['spec', 'coverage'],
    files: ['./index.js'],
    preprocessors: {
      './index.js': ['webpack', 'sourcemap'],
    },
    webpack: webpackConfig,
    webpackMiddleware: {
      noInfo: true
    },
    coverageReporter: {
      dir: './coverage',
      reporters: [
        { type: 'lcov', subdir: '.' },
        { type: 'text' }
      ]
    }
  });
};

webpack.conf.test.js

var path = require('path');
var webpack = require('webpack');
var vueLoaderConfig = require('./vue-loader.conf.js');
var eslintFormatter = require('eslint-friendly-formatter');
var HtmlWebpackPlugin = require('html-webpack-plugin');

function resolve(dir) {
  return path.join(__dirname, '..', dir);
}

module.exports = {
  devtool: '#inline-source-map',
  output: {
    path: path.resolve(__dirname, '../dist/js'),
    filename: 'build.js',
    publicPath: '/ntx/js/'
  },
  resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      '@': resolve('src')
    }
  },
  resolveLoader: {
    alias: {
      'scss-loader': 'sass-loader'
    }
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env': { NODE_ENV: '"testing"' }
    })
  ],
  // use inline sourcemap for karma-sourcemap-loader
  module: {
    rules: [
      { test: /\.css$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }] },
      { test: /\.postcss$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }] },
      { test: /\.less$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }, { loader: 'less-loader', options: { sourceMap: false } }] },
      { test: /\.sass$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }, { loader: 'sass-loader', options: { sourceMap: false, indentedSyntax: true } }] },
      { test: /\.scss$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }, { loader: 'scss-loader', options: { sourceMap: false } }] },
      { test: /\.stylus$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }, { loader: 'stylus-loader', options: { sourceMap: false } }] },
      { test: /\.styl$/, use: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, sourceMap: false } }, { loader: 'stylus-loader', options: { sourceMap: false } }] },
      { test: /\.(js|vue)$/,
        loader: 'eslint-loader',
        enforce: 'pre',
        include: [resolve('src'), resolve('test')],
        options: {
          formatter: eslintFormatter
        }
      }, {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
            css: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }],
            postcss: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }],
            less: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }, { loader: 'less-loader', options: { sourceMap: false } }],
            sass: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }, { loader: 'sass-loader', options: { sourceMap: false, indentedSyntax: true } }],
            scss: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }, { loader: 'scss-loader', options: { sourceMap: false } }],
            stylus: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }, { loader: 'stylus-loader', options: { sourceMap: false } }],
            styl: ['vue-style-loader', { loader: 'css-loader', options: { minimize: false, souremap: false } }, { loader: 'stylus-loader', options: { sourceMap: false } }],
          },
          transformToRequire: {
            video: 'src',
            source: 'src',
            img: 'src',
            image: 'xlink:href'
          }
        }
      }, {
        test: /\.js$/,
        loader: 'babel-loader',
        include: [resolve('src'), resolve('test')]
      }, {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 10000,
          name: path.posix.join('./dist/img', 'img/[name].[hash:7].[ext]')
        }
      }
    ]
  }
};

有没有办法做我正在寻找的事情?

1 个答案:

答案 0 :(得分:0)

结帐Karma configuration options

您可以使用--no-single-run代替--single-run观看模式中运行测试。您也应该可以使用--auto-watch运行此功能。