2014-01-06 14 views
27

AngularJSサービスの依存関係を正しく解決するのに苦労しています。

StackOverflowで同様のエラーが発生した他の投稿が多数ありますが、いずれも問題を解決していないようです。ここで

は、アプリのコードである:ここで

cm.modules.app = angular.module('myApp', ['ngRoute', 'ngAnimate']); 
myServiceName = function($http) { 
    // do stuff 
}; 
myServiceName.prototype.value = 1; 

cm.modules.app.service('defaultAlertFactoryA', myServiceName); 

は、テストコードです:ここで

describe('test alertFactoryA', function() { 
    var $provide; 
    var mAlertFactoryA; 

    beforeEach(module(cm.modules.app)); 

    beforeEach(angular.mock.module(function(_$provide_) { 
    $provide = _$provide_; 
    })); 

    beforeEach(function() { 
    inject(function($injector) { 
     mAlertFactoryA = $injector.get('defaultAlertFactoryA'); 
    }); 
    }); 

    it('should work', function() { 
    expect(true).toBe(true); 
    }); 
}); 

は誤りです:

Error: [$injector:unpr] Unknown provider: defaultAlertFactoryAProvider <- defaultAlertFactoryA http://errors.angularjs.org/1.2.0-rc.2/ $injector/unpr?p0=defaultAlertFactoryAProvider%20%3C-%20defaultAlertFactoryA

は質問:どのように私はこの問題を解決しますテストは合格する?あなたは

beforeEach(module('myApp')); 

Demo

+2

をテストし、あなたのカルマの設定ファイルに含まれてあなたのサービスファイルですか? (私はあなたがカルマを使用していると仮定しています) – dcodesmith

+0

@dcodesmithカルマを使用しています...はい、私がconsole.log(myServiceName)をしたことを確認する。テスト内から参照細かい部分を解決しました – eb80

答えて

16

以下にその名を提供する必要があなたのモジュールをブートストラップするために

22

は、私はそれが

beforeEach(function() { 
    module(cm.modules.app.name); 

    module(function($provide) { 
     $provide.service('defaultAlertFactoryA', myServiceName); 
    }); 

    inject(function($injector) { 
     defaultAlertFactory = $injector.get('defaultAlertFactoryA'); 
    }); 
}); 
8

(最終的に)取り組んで取得するために使用するものですあなたのkarma.conf.jsファイルにサービスファイルを含める必要があるように聞こえます

files: [ 

    'app/bower_components/angular/angular.js', 
    'app/bower_components/angular-mocks/angular-mocks.js', 
    'app/bower_components/angular-ui-router/release/angular-ui-router.js', 
    'app/app.js', 
    'app/controllers/*.js', 
    'app/services/*.js', 
    'tests/**/*.js' 
], 

インクルードがここに含まれていない場合、彼らはユニットにアクセスすることはできませんが

関連する問題