Как исправить ошибку 'ReferenceError: не удается найти переменную: require' при запуске модульного теста в Karma, Webpack, PhantomJS

я использую Karma, Webpack, enzyme, PhantomJS для тестирования моего проекта react. Когда я запускаю ниже команды для запуска тестовых случаев,

./node_modules/karma/bin/karma start config/karma.conf.js --single-run --browsers PhantomJS

я получил ниже ошибки:

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  ReferenceError: Can't find variable: require
  at /dev/test/test.js:3

в строке 3 исходного кода теста.js, я не использовал require ниже код:

import { expect } from 'chai'; 

я блуждаю, почему PhantomJS жалуются на эту ошибку.

Ниже приведен мой файл Karma conf:

var path = require('path');
var webpackconf = require("./webpack.config")

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['mocha', 'chai'],
    files: [
      '../test/**/*.js'
    ],

    preprocessors: {
      // add webpack as preprocessor
      '../src/**/*.js': ['babel'],
      '../test/**/*.js': ['babel'],
      '../src/**/*.less': ['babel']
    },
    webpack: { //kind of a copy of your webpack config
      devtool: 'inline-source-map', //just do inline source maps instead of the default
      module: {
        loaders: [
          {
            test: /.js$/,
            loader: 'babel',
            exclude: /node_modules/,
            // query: {
            //   presets: ['es2015',  'react']
            // }
          },
          {
            test: /.json$/,
            loader: 'json',
          },{
            test: /.less$/,
            loader: "style!css!less",
          },
        ]
      },
      externals: {
        'react/lib/ExecutionEnvironment': true,
        'react/lib/ReactContext': true,
        'react/addons': true
      }
    },

    webpackServer: {
      noInfo: true //please don't spam the console when running in karma!
    },

    plugins: [
      'karma-webpack',
      'karma-jasmine',
      'karma-sourcemap-loader',
      'karma-chrome-launcher',
      'karma-phantomjs-launcher',
      'karma-mocha',
      'karma-chai',
      'karma-mocha-reporter',
      'karma-babel-preprocessor'
    ],


    babelPreprocessor: {
      options: {
        presets: ['es2015',  'react'],
        sourceMap: 'inline'
      }
    },
    reporters: ['mocha'],

    // reporter options
    mochaReporter: {
      colors: {
        success: 'blue',
        info: 'bgGreen',
        warning: 'cyan',
        error: 'red'
      },
      symbols: {
        success: '+',
        info: '#',
        warning: '!',
        error: 'x'
      }
    },

    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
  })
};

1 ответов


Я думаю, что вы прокомментировали погрузчика. Без es2015 предустановленный babel может не знать, как бороться с import заявления. (import является частью модулей ES6, но еще не стандартна в узле.) Вы пробовали раскомментировать query и presets заблокировать?