Карма Webpack Жасмин Юнит Тестирование не работает
Я пытаюсь настроить тестирование с помощью Karma, Jasmine, Webpack в AngularJS. Мой веб-пакет работает нормально, и я могу запустить свой сайт, используя npm start
Простой тест работает хорошо, но в тот момент, когда я пытаюсь добавить свой app.js, все идет под откос.
Я перепробовал много много поисков и много решений. Пожалуйста, не думайте, я пишу этот вопрос, как только попал в тупик. Я провел весь день сегодня, просто гуглил и находил возможные решения.
Есть мой файл karma.conf.js
// Karma configuration
// Generated on Mon Sep 18 2017 09:27:36 GMT+1000 (AEST)
var webpackConfig = require('./webpack.config.js');
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
frameworks: ['jasmine'],
// ... normal karma configuration
files: [
'./node_modules/jasmine-core/lib/jasmine-core/jasmine.js',
'./node_modules/angular/angular.js', // angular
'./node_modules/angular-mocks/angular-mocks.js', // loads our modules for tests
// all files for test
'./resources/assets/js/auth/app.js',
'./resources/assets/js/account/invoices/*.spec.js',
],
preprocessors: {
// add webpack as preprocessor
'./resources/assets/js/account/invoices/*.spec.js': ['webpack'],
},
webpack: {
// webpack configuration
webpackConfig
},
webpackMiddleware: {
// webpack-dev-middleware configuration
// i. e.
stats: 'errors-only'
},
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_DEBUG,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome'],
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
Тест, который я написал,
describe('Unit testing Dash', function() {
var $compile,
$rootScope;
// Load the myApp module, which contains the directive
beforeEach(angular.mock.module('app'));
// Store references to $rootScope and $compile
// so they are available to all tests in this describe block
beforeEach(inject(function(_$compile_, _$rootScope_){
// The injector unwraps the underscores (_) from around the parameter names when matching
$compile = _$compile_;
$rootScope = _$rootScope_;
}));
it('Replaces the element with the appropriate content', function() {
// Compile a piece of HTML containing the directive
var element = $compile("<dash-list></dash-list>")($rootScope);
// fire all the watches, so the scope expression {{1 + 1}} will be evaluated
$rootScope.$digest();
// Check that the compiled element contains the templated content
expect(element.html()).toContain("Unpaid");
});
});
И это терпит неудачу с этой ошибкой:
18 09 2017 15:00:18.554:DEBUG [web-server]: serving (cached): project/resources/assets/js/account/invoices/dash.spec.js
18 09 2017 15:00:18.557:DEBUG [web-server]: serving (cached): project/resources/assets/js/account/invoices/add-business.spec.js
18 09 2017 15:00:18.576:DEBUG [web-server]: serving: project/node_modules/karma/static/context.js
Chrome 60.0.3112 (Mac OS X 10.12.6) ERROR
Uncaught SyntaxError: Unexpected token import
at resources/assets/js/auth/app.js:1
Я использую OSX. Технически, веб-пакет должен обслуживать скомпилированный файл для Karma. Но неожиданный импорт токенов означает, что файл не компилируется и не передается в Karma.
Пожалуйста помоги.
Я даже пытался скомпилировать с babel, но это тоже никуда не делось. Я перешел на webpack, потому что у нас уже есть конфигурация webpack, и проект компилируется с использованием webpage.config
ОБНОВИТЬ
Для всех, кто задумывался над этим вопросом, я использовал ВАРИАНТ № 1 Феликса. Я просто включил скомпилированные файлы в Карму. Это сработало как шарм.
Webpack автоматически компилирует файлы всякий раз, когда файлы изменяются, поэтому просто добавление вывода работало нормально.
Мой массив файлов выглядел следующим образом
files: [
'./node_modules/jasmine-core/lib/jasmine-core/jasmine.js',
'./node_modules/angular/angular.js', // angular
'./node_modules/angular-mocks/angular-mocks.js', // loads our modules for tests
'./resources/assets/js/account/stripe.spec.js',
'./node_modules/angular-stripe/index.js',
'./node_modules/angular-stripe-checkout/angular-stripe-checkout.js',
// all files for test
'./public/assets/vendor.bundle.js',
'http://localhost:8080/assets/account.js',
'./resources/assets/js/account/invoices/*.spec.js',
Мне пришлось использовать http для второго варианта, к сожалению, но он работает нормально.
2 ответа
Проблема кармы для установки: ОШИБКА
bpack-2.0.3.tgz"}},"2.0.4":{"name":"karma-webpack","version":"2.0.4",
Для решения этой ошибки полезна следующая команда. Это решение для меня...
очистка кеша npm --force
Обратите внимание, что в вашем файле кармы вы переходите в веб-пакет только для запуска по спецификациям. Таким образом, ваше приложение не обрабатывается.
У вас есть 2 варианта:
- Добавьте свой пакет веб-пакетов в карму вручную.
- Импортируйте "приложение" из спецификации, таким образом, веб-пакет запустится из спецификации и импортирует приложение для вас.