У меня есть несколько тестовых файлов с тестами, которые я хотел бы запустить для своего приложения.
Я пытаюсь использовать 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
, только исходные файлы, тестовые файлы в одном, но не в другом, исходные файлы в одном, но не в другом, нет, оба . Никаких хороших результатов, хотя иногда и новые ошибки.