2016-03-31 13 views
0

私は、カルマブラウザで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ファイルを追加することです。しかし、私は自分のソースファイルをカルマに追加する予定ではないと思っていた(少なくともカルマブラウジングではない)。これは私のプロジェクトをセットアップする正しい方法ですか?

答えて

1

はい、「回避策」はkarma-browserifyを使用するための所望の方法です。

プリプロセッサのconfigオブジェクトのキーはファイル構成に指定 ファイルをフィルタリングするために使用されています。これは、プリプロセッサによって処理されなければならないが、それらが含まれていないインクルードファイルの

preprocessors definition指定します。

それは実際にファイルが含まれていることをfiles definition次のとおりです。

ファイルの配列は、ファイルが見て、カルマによって提供されているブラウザと に含まれるファイルを決定します。

0

ファイルは、Karmaに、どのファイルをベースパスに対して読み込むべきかを指示します。これらは次のとおりである:

すべてのテスト関連のライブラリは 当社のソースコードが テストをテストするために自分自身

関連する問題