私は、カルマブラウザで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...
]);
私は
function MainCtrl(/*...deps...*/) {
var ctrl = this;
ctrl.foo = 'bar';
}
module.exports = MainCtrl;
はその後、別の場所で最後に
var app = require('angular').module('myApp');
app.controller('MainCtrl', [/*...deps...*/, require('./MainCtrl')]);
のようなコントローラを登録するようになりますMainCtrl.jsで私のコントローラを定義する私のテストは見え
(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();
});
});
}());
のような
回避策
私が持っている問題を回避するには、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']
}
、すべての作品に私のmain.js
ファイルを追加することです。しかし、私は自分のソースファイルをカルマに追加する予定ではないと思っていた(少なくともカルマブラウジングではない)。これは私のプロジェクトをセットアップする正しい方法ですか?