ショートバージョン:カルマを走らせると角が私の「共通」モジュールを挿入できないと言っています。 実際のエラーがある:
Error: [$injector:nomod] http://errors.angularjs.org/1.5.5/$injector/nomod?p0=common
ここでは詳細があります:
私のカルマtest.js
"use strict";
describe('Testing ModuleToTest',function(){
beforeEach(module('ModuleToTest'));
var $scope = {};
var factory = {...make up stuff...}
// inject - access angular controller
beforeEach(inject([
'$controller','$rootScope',
function($ctrl,$rs){
$scope = $rs.$new();
$ctrl('ModuleToTestCtrl',{
$scope:$scope,
CommonFactory:factory
});
}]));
it('should define a someStuff object',function(){
expect(testScope.someStuff).toBeDefined();
});
});
マイModuleToTest定義:
module.jsファイル:
angular.module('ModuleToTest',[]);
controller.jsファイル:
angular.module('ModuleToTest')
.controller('ModuleToTestCtrl',
['$scope','$http','CommonFactory',
function($scope,factory){
$scope.someStuff = ['foo','bar'];
}]);
CommonFactoryを定義モジュール:
module.jsファイル:
angular.module('common',[]);
CommonFactory.js
angular.module('common')
.factory('CommonFactory',['$http',function($http){
// do factory stuff here
}]);
アプリケーションモジュールdefintionは、app.js:
angular.module('MyMainApp',['ModuleToTest', ... , 'common']);
karma.config.js:
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],//'requirejs'],
// list of files/patterns to load in the browser
files: [
{pattern: 'js/vendor/angular/*.js'},
{pattern: 'js/common/*.js'},
{pattern: 'moduleToTest/js/*.js'},
{pattern: 'moduleToTest/*.html'},
{pattern: 'js/*.js'},
{pattern: 'index.html'},
{pattern: 'test/test.js'}
],
// list of files to exclude
exclude: [
'js/vendor/bootstrap*.js',
'js/vendor/jquery*.js'
],
クイックcaveate:私はそれが期待通りMyMainAppが働きます。私はカルマを使用してアプリケーションモジュールの単体テストを構築し始めました。最終的に私はMyMainAppの単体テストを構築しますが、私は小規模から始めようとしています。
回答に加えて、提案や説明を歓迎します。ありがとうございました!
UPDATE:参考になった後に(ありがとうございました!)つまり、同じエラーが発生していますが、問題を単純化しようとしました。
ModuleToTestから 'common'の記述を削除しました。そして、カルマはまだ「共通」について不平を言っています。ここでは詳細です:
module.jsファイル(予告CommonFactoryへの参照):
angular.module('ModuleToTest',[]);
私のカルマは
"use strict";
describe('Testing ModuleToTest',function(){
var testScope = {};
beforeEach(function(){
module('ModuleToTest');
inject(function($rootScope,$controller){
testScope = $rootScope.$new();
$controller('ModuleToTestCtrl',{
$scope: testScope
});
});
});
// No it statement for now because the module won't even load
});
マイModuleToTest定義をtest.js
コントローラ。JSファイル(予告CommonFactoryの除去):
angular.module('ModuleToTest')
.controller('ModuleToTestCtrl',
['$scope',function($scope){
$scope.someStuff = ['foo','bar'];
}]);
ANSWER:簡易版を考えるには、ソリューションは、中-角度mocks.js後angular.min.jsを入れていましたkarma.conf.jsファイル。
私はこれが他の人にトラブルを救うことを望みます。そのコンポーネントが使用されているところがあるとしてあなたは、あなたのテストのためにすなわち
angular.module('ModuleToTest', ['common']);
を「ModuleToTest」への依存関係として「普通」が必要です
あなたはまだあなたのテストに注入されていない 'common'モジュールの一部であり、あなたのコントローラで' CommonFactory'を注入しているためです。 CommonFactoryインジェクションを「ModuleToTestCtrl」に取り除くと助けてくれますか? –