2016-04-01 8 views
0

私はそうのような別のモジュールから別のサービスに依存してサービスを持っている:私は私のauthServiceの書き込みテストをしようとしているが、注入エラーを取得しています別のモジュールから別のサービスでのサービスのモック

(function() { 
    'use strict'; 

    angular 
    .module('app.core') 
    .factory('userService', userService); 

    function authService() { 

     return: { 
      userLoggedIn: false 
     } 
    } 

})(); 


(function() { 
    'use strict'; 

    angular 
    .module('app.services') 
    .factory('AuthService', authService); 

    authService.$inject = ['$http', 'userService']; 

    function authService($http, userService) { 
    } 

をそれは私がこれを克服することができ、$provideを使用しますどのようにuserService

beforeEach(function() { 
    module('app.services'); 
}); 
beforeEach(inject(function(_AuthService_) { 
    authService = _AuthService_; 

})); 

を見つけることができないので、ここで私を助けて?

UPDATE

私は次のことを試みたが、それでもエラーを取得

beforeEach(function() { 
    module('app.services'); 
}); 

beforeEach(inject(function(_AuthService_, _$provide_) { 
    authService = _AuthService_; 
    $provide = _$provide_; 
})); 

beforeEach(function() { 
    module(function ($provide) { 
     $provide.value('userService', function(){ 
      return { 
       userLoggedIn: false 
      } 
     }); 
    }); 
}); 

[OK]をを解決し、私はちょうど次の操作を実行するために必要な:

beforeEach(function() { 
    module('app.dataservices'); 
    module(function ($provide) { 
     $provide.value('userService', function(){ 
      return { 
       userLoggedIn: false 
      } 
     }); 
    }); 
}); 

beforeEach(inject(function(_AuthService_) { 
    authService = _AuthService_; 
})); 

テストが今すぐ通っています

答えて

1

サービスで$stateサービスを使用していて、IDを偽装したいとします。具体的にはgetメソッド。次に、最初にdescribeのようなものを追加する必要があります。

beforeEach(function() { 
     module(function ($provide) { 
      $provide.service('$state', function() { 
       return { 
        get: function() {} 
       } 
      }); 
    }); 
}); 

this gistでは、$provideを使用してからかったサービスのいくつかの興味深い例を見つけることができます。

0

あなたはkarma.conf.js内のすべてのサービスを事前にロードする必要があります(あなたがカルマを使用していると仮定します)。ここ

が私たちのkarma.conf.jsファイルはカルマテストランナー構成* ...

/** ある */ '厳格な使用';

module.exports = function (config) { 
config.set({ 
basePath: './', 
browsers: ['PhantomJS'], 
frameworks: ['jasmine'], 
reporters: ['mocha', 'coverage'], 
singleRun: true, 
preprocessors: { 
    'src/**/!(*spec)*.js': ['coverage'], 
    'dest/**/*.html': ['ng-html2js'] 
}, 
ngHtml2JsPreprocessor: { 
    stripPrefix: 'dest/', 
    moduleName: 'ngHtmlFiles' 
}, 
coverageReporter: { 
    type: 'html', 
    dir: 'coverage' 
}, 
files: [ 
    'dest/vendor.min.js', 
    'bower_components/angular-mocks/angular-mocks.js', 
    'src/**/*.js', 
    'dest/**/*.html' 
] 
}); 
}; 
+0

はい、私は問題ですが、私のテストでは、AuthServiceを含む 'app.services'モジュールにのみ読み込んでいます。しかし、このサービスは、別のモジュールに含まれているサービスに依存しています。だから私は、私のテスト仕様に 'app.core'もロードせずに、' AuthService'に私の 'userService'の模擬バージョンを提供する方法を見つけようとしています – mindparse

関連する問題