У меня есть угловое приложение (с набором файлов ES5 и ES6), для которого я разрабатываю тесты. Файлы ES6, которые я транслирую с помощью Babel CLI с этими параметрами --modules system --module-ids. Пусть говорят, что у меня есть что-то вроде этого:
Файл ES5:
angular.module('app').controller('A', function($scope) {
...
});
Файл ES6:
export class B {
constructor($scope) {
this.$scope = $scope
}
...
}
И у меня есть файл boot.js:
import {B} from 'controllers/B';
angular.module('app').controller('B', B);
и на моей странице я импортирую загрузочный файл (используя es6-module-loader) и загружаю угловое приложение:
System.import('boot').then(function() {
angular.bootstrap(document, ['app']);
});
Теперь я полагаю, что мне нужно сделать что-то похожее на тесты кармы - мне нужно загрузить мой boot.js перед запуском моих тестов. Как я решаю проблему, это вызвать System.impot('boot') в моих тестовых файлах - но это не кажется правильным:
'use strict';
System.import('boot');
describe('Controller: B', function() {
beforeEach(module('app'));
var $scope;
beforeEach(inject(function(_$rootScope_, $controller) {
scope = _$rootScope_.$new();
$controller('B', {$scope: $scope);
}));
it('...', function() {
});
});
Есть лучший способ сделать это?
Решение, в котором я попал, включало использование карма-системы.
Включите все ваши файлы тестов в разделе systemjs/files:
systemjs: {
files: [
// TEST FILES
],
configFile: 'system.config.js',
config: {
paths: {
'angular-mocks': 'node_modules/angular-mocks/angular-mocks.js'
}
}
}
И на тестах вместо использования:
System.import('boot');
Использование:
'use strict';
import 'angular-mocks';
import 'angular/boot.js';
describe('Controller: B', function() {
beforeEach(module('app'));
var $scope;
beforeEach(inject(function(_$rootScope_, $controller) {
scope = _$rootScope_.$new();
$controller('B', {$scope: $scope);
}));
it('...', function() {
});
});
Надеюсь, это поможет кому-то еще в будущем.
minimatch patterns
или нет. Кроме того, мой karma.config.js очень похож на ваш.systemjs: { // Path to your SystemJS configuration file configFile: 'test/unit/system-test.config.js', files: [ 'test/unit/modules/security/security.spec.js' ], // includeFiles: [ // 'dist/js/libs.js', // 'dist/js/app.js', // 'dist/js/app.typescript.js', // 'test/unit/old_js/**/*.spec.js' // ], config: { paths: { 'angular-mocks': 'bower_components/angular-mocks/angular-mocks.js' } } }