Я пытаюсь выполнить тестирование приложения AngularJS/Browserify с помощью карма-браузера. В конце концов, когда я бегу мой Глоток карму задачу, я получаю ошибку Error: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it...
Единичное тестирование Приложение AngularJS с карма-браузером
Мои gulpfile.js имеет задачу
gulp.task('test', function(done) {
new karma.Server({
configFile: __dirname + '/karma.conf.js'
}, done).start();
});
Мои karma.conf.js включает
{
// ...
frameworks: ['browserify', 'jasmine'],
files: [
'node_modules/angular/angular.js',
'node_modules/angular-mocks/angular-mocks.js',
'spec/**/*.js'
],
preprocessors: {
'spec/**/*.js': [ 'browserify' ]
},
browserify: {
debug: true
}
// ...
}
Я определяю свой модуль в main.js, который включает
require('angular').module('myApp', [
//...lots of `require`s for each dependency...
]);
Я определяю мой контроллер в MainCtrl.js, который выглядит как
function MainCtrl(/*...deps...*/) {
var ctrl = this;
ctrl.foo = 'bar';
}
module.exports = MainCtrl;
затем зарегистрировать контроллер в другом месте, как
var app = require('angular').module('myApp');
app.controller('MainCtrl', [/*...deps...*/, require('./MainCtrl')]);
Наконец мой тест выглядит
(function() {
"use strict";
describe('MainCtrl', function() {
var ctrl;
beforeEach(angular.mock.module('myApp'));
beforeEach(inject(function($controller) {
ctrl = $controller('MainCtrl');
}));
it('should be defined', function() {
expect(ctrl).toBeDefined();
});
});
}());
Обходное решение
Обходной у меня есть, чтобы добавить свой main.js
файл karma.conf.js
files: [
'js/main.js', // ADDED: Defines the app and `require`s angular
'node_modules/angular-mocks/angular-mocks.js',
'spec/**/*.js'
],
preprocessors: {
'js/main.js': ['browserify'], // ADDED
'spec/**/*.js': ['browserify']
}
и все работает. Но я думал, что я не должен добавлять свои исходные файлы в карму (по крайней мере, не с карма-браузером). Это правильный способ настроить мой проект?