Karma не запускает тесты с операторами импорта в karma-webpack

У меня есть несколько тестовых файлов с тестами, которые я хотел бы запустить для своего приложения.

Я пытаюсь использовать karma, karma-webpack, karma-babel-preprocessor, karma-chrome-launcher и jasmine в своем тестировании. Мое приложение зависит от многих вещей, включая backbone, marionette и т. д. Мое приложение построено с использованием webpack, и я пытаюсь использовать webpack для объединения файлов для тестирования. (Сначала я хотел посмотреть, можно ли пропустить этот шаг, т.е. просто import файл для проверки, но, похоже, это невозможно.)

Мой тестовый скрипт выглядит так

package.json (раздел сценариев)

"test": "./node_modules/karma/bin/karma start",

Остальные файлы:

karma.conf.js

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

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
      { pattern: 'test/**/*.spec.js', watched: true },
      { pattern: 'test/*.spec.js', watched: true }
    ],
    exclude: [
    ],
    preprocessors: {
        'test/**/*.spec.js': ['webpack'],
        'test/*.spec.js': ['webpack']
    },
    webpack: webpackConfig,
    webpackMiddleware: {
        stats: 'errors-only'
    },
    reporters: ['progress'],
    port: 9876,
    colors: true,    
    logLevel: config.LOG_INFO,           
    autoWatch: true,       
    browsers: ['Chrome'],        
    singleRun: false,
    concurrency: Infinity
  })
}

test/test.spec.js Этот файл виден

describe("A suite", function () {
    it("contains spec with an expectation", function () {
        expect(true).toBe(true);
    });
});
describe("Another suite", function () {
    it("contains another spec with an expectation", function () {
        expect(true).toBe(false);
    });
});

test/models/devicegroup.spec.js Этот файл не виден

import backbone from 'backbone';

describe("backbone", function () {
    it("containsasdfasdfasdfasdfspec with an expectation", function () 
  {
        expect(true).toBe(false);
    });
});

Моя структура папок:

- karma.conf.js
- test/
- - test.spec.js
- - models/
- - - devicegroup.spec.js
- public/
- - js/
- - - app.js

Когда в моих файлах нет операторов import вверху, карма будет выполняться и проходить/не выполняться, как и ожидалось. Помещение оператора import вверху приведет к тому, что карма проигнорирует файл. Никаких ошибок не выдает.

Как заставить karma/karma-webpack запускать мои тесты с операторами импорта/какой безопасный для кармы способ импортировать модули в мои тесты?

Когда в test/models/devicegroup.spec.js нет оператора import:

// import backbone from 'backbone';

describe("backbone", function () {
    it("contains with an expectation", function () {
        expect(true).toBe(false);
    });
});

вывод терминала: (обратите внимание, что выполняется на один тест меньше)

Скриншот кармы вывода терминала, успешно выполняющего тест файла без оператора импорта

Когда test/models/devicegroup.spec.js содержит оператор import:

import backbone from 'backbone';

describe("backbone", function () {
    it("contains with an expectation", function () {
        expect(true).toBe(false);
    });
});

вывод терминала:

Скриншот терминала вывода кармы, когда не удается увидеть файлы с операторами импорта

Не вижу ошибок в браузере Карма открывается.

РЕДАКТИРОВАТЬ:

Я экспериментировал, добавляя свои исходные файлы к атрибутам files и preprocessors в моем файле karma.conf.js в соответствии с этот пример репо. В поведении не было никаких изменений, кроме значительного увеличения времени тестирования.

karma.conf.js

files: [
  { pattern: 'public/js/**/*.js', watched: true},
  { pattern: 'test/**/*.spec.js', watched: true },
  // each file acts as entry point for the webpack configuration
],

preprocessors: {
    // add webpack as preprocessor
    'public/js/**/*.js': ['webpack'],
    'test/**/*.spec.js': ['webpack'],
},

EDIT2: ради эксперимента (и на основе борьбы этого человека ), я пробовал вышеупомянутый karma.conf.js во всех возможных комбинациях - только тестовые файлы в files и preprocessors, только исходные файлы, тестовые файлы в одном, но не в другом, исходные файлы в одном, но не в другом, нет, оба . Никаких хороших результатов, хотя иногда и новые ошибки.


person Caleb Jay    schedule 05.06.2018    source источник
comment
Заметили ли вы фреймворки: ['jasmine'], { шаблон: 'test/**/*.spec.js', наблюдаемый: true}, { шаблон: 'test/models/*.spec.js', наблюдаемый: true } ] отсутствует квадратная скобка (или есть лишняя, не уверен)?   -  person Devin Fields    schedule 06.06.2018
comment
Это может быть артефакт копирования/вставки, я не вижу его в своем редакторе кода... секундочку, хотя дай мне посмотреть поближе   -  person Caleb Jay    schedule 06.06.2018
comment
Спасибо, что указали на это, это была ошибка копирования/вставки, приведенный выше код теперь точно отражает то, что у меня есть локально   -  person Caleb Jay    schedule 06.06.2018
comment
Вы нашли решение этой проблемы, потому что я испытываю то же самое.   -  person Dimitri Toonen    schedule 12.07.2018
comment
Нет, я переключился на использование Jest.   -  person Caleb Jay    schedule 12.07.2018


Ответы (1)


Немного поздно, но я столкнулся с той же проблемой и часами искал, почему мой импорт препятствует выполнению набора тестов. karma-webpack-4.0.0-rc.2 принес просветление, предоставив сообщения об ошибках!!

В моем случае пара модулей не найдена, angular-mock, jquery, angular и другие.

Как исправить

Поместите модули в массив файлов в вашем karma.config, например:

files = [
  "node_modules/jquery/dist/jquery.js",
  "node_modules/angular/angular.js",
  "node_modules/angular-mocks/angular-mocks.js",
  { pattern: "test/**/*.ts", watched: false }

Я надеюсь, что это поможет кому-то.

ИЗМЕНИТЬ

Мои текущие версии пакетов, связанных с тестированием:

"@types/jasmine": "^2.8.8",
"jasmine": "^3.2.0",
"jasmine-core": "^3.2.1",
"jasmine-reporters": "2.3.2",
"jasmine-ts": "^0.2.1",
"karma": "3.0.0",
"karma-chrome-launcher": "2.2.0",
"karma-jasmine": "1.1.2",
"karma-junit-reporter": "1.2.0",
"karma-phantomjs-launcher": "1.0.4",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.32",
"karma-webpack": "^4.0.0-rc.2",
"typescript": "3.0.3",
"webpack": "4.17.2",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "3.1.8"
person scipper    schedule 11.09.2018
comment
да, извините за задержку ???? - person scipper; 13.09.2018
comment
Не будь! Вы внесли свой вклад в решение еще одного из почти бесконечного количества вопросов, оставшихся без ответа в Интернете. xkcd.com/979 - person Caleb Jay; 21.09.2018