Как заставить Karma + Webpack найти модуль?

Я хочу запустить свои тесты на куче модулей после того, как webpack объединит их вместе с помощью средства запуска тестов Karma, но всякий раз, когда я запускаю свои тесты, Karma говорит:

«Ошибка: не удается найти модуль «hello.js» по адресу http://localhost:9877/base/src/hello.spec.js?d301966ffc1330826574d9d8fff5a644c3390c68:47"

У меня есть файл спецификации:

var a = require('hello.js');

describe("a test test", function() {

  it("humperdink test", function() {
    expect(a).toEqual('humperdink');
  }); //end it

}); //end describe

hello.js это:

var a = 'humperdink';

module.exports = a;

Оба эти файла находятся в одной папке.

Мой karma.conf.js:

module.exports = function (config) {
  config.set({
    frameworks: ['jasmine'],
    files: [
      'src/**/*.js',
      'tests/**/*.spec.js'
    ],
    preprocessors: {
      'tests/**/*.spec.js': ['webpack'],
      'src/**/*.js' : ['webpack']
    },
    browsers: ['PhantomJS'],
    webpack: {
      entry: './src/hello.spec.js',
      output: {
        filename: 'bundle.js'
      }
    },
    webpackMiddleware: {
      noInfo: true
    }
  })
};

В настоящее время мои установленные devDependencies

"devDependencies": {
    "jasmine-core": "^2.3.4",
    "jshint": "^2.8.0",
    "karma": "^0.13.15",
    "karma-jasmine": "^0.3.6",
    "karma-jshint-preprocessor": "0.0.6",
    "karma-phantomjs-launcher": "^0.2.1",
    "karma-webpack": "^1.7.0",
    "phantomjs": "^1.9.19",
    "sinon": "^1.17.2",
    "webpack": "^1.12.9"

Как заставить Karma найти модуль hello.js?

Я попытался изменить первую строку файла спецификации на такие вещи, как

require('hello.js');

or

require('./hello.js');

or

require('hello');

по совету Karma Webpack - Ошибка: не удается найти модуль./ test/utilities.js

Я не думаю, что здесь происходит что-то слишком сложное, например, Не удается найти ошибка модуля при использовании karma-webpack.

Я проверил, чтобы убедиться, что бегун тестов Karma работает иначе. Если я запускаю действительно простой тест в своем собственном файле, он работает отлично.

Как решить эту проблему?


person Gabriel Kunkel    schedule 26.11.2015    source источник
comment
Вы пробовали require('../src/hello');?   -  person Henrik Andersson    schedule 26.11.2015
comment
Я сделал это до того, как переместил оба файла в один и тот же каталог.   -  person Gabriel Kunkel    schedule 26.11.2015


Ответы (1)


Я воспроизвел ваш проект и исправил его. После https://github.com/webpack/karma-webpack

В спецификации:

var a = require('../src/hello.js');

карма.conf.js:

module.exports = function (config) {
  config.set({
    frameworks: ['jasmine'],
    files: [
      //'src/**/*.js', <-------- Remove or comment this
      'tests/**/*.spec.js'
    ],
    preprocessors: {
      'tests/**/*.spec.js': ['webpack'],
      'src/**/*.js' : ['webpack']
    },
    browsers: ['PhantomJS'],
    webpack: {
      entry: './tests/hello.spec.js',
      output: {
        filename: 'bundle.js'
      }
    },
    webpackMiddleware: {
      noInfo: true
    }
  })
};

характеристики кармы приводят к терминалу

И дополнительно для команды npm test: в package.json:

"scripts": {
    "test": "./node_modules/karma/bin/karma start"
}
person Aitor Aznar Álvarez    schedule 26.11.2015