2015-02-22 4 views
5

Ho il seguente fornitore:Unknown provider nel Karma test di

(function (angular) { 
    angular.module('app') 
     .provider('$_Config', ConfigProvider); 

    function ConfigProvider() { 
     .... //routes definition 
    } 
    ConfigProvider.prototype.$get = function() { 
    return this; 
    }; 

    ConfigProvider.prototype.getRoutes = function() {...} 

    //other prototype functions 

})(angular); 

In app.js sto usando in questo modo:

app.config(function ($routeProvider, $_ConfigProvider) { 
    var routes = $_ConfigProvider.getRoutes(); 
    routes.forEach(function(route) { 
     $routeProvider 
      .when(route.route, { 
      ..... 
      }) 

} 

Ogni cosa funziona bene fino a che non arriva a test. Qui è la mia prova:

describe('Provider: $_ConfigProvider', function() { 

    // load the providers module 
    beforeEach(module('app')); 

    // instantiate provider 
    var $_ConfigProvider; 
    beforeEach(inject(function (_$_Config_) { 
    $_ConfigProvider = _$_Config_; 
    })); 


    it('Should verify getRoutes function', function() { 
    var routes = $_ConfigProvider.getRoutes(); 
    expect(Object.prototype.toString.call(routes) === '[object Array]').toBe(true); 
    }); 
}); 

Quando si esegue il test sto ottenendo il seguente errore:

Error: [$injector:modulerr] Failed to instantiate module app due to: 
    Error: [$injector:unpr] Unknown provider: $_ConfigProvider 

Nota: Il $_ConfigProvider viene iniettato correttamente in fase di esecuzione.

risposta

4

Probabilmente non si include il file in cui è definito il provider nell'elenco delle dipendenze karma.conf.js. Vedere questa domanda:

Include dependencies in Karma test file for Angular app?

vorrei rinominare il $ _config a qualcos'altro, '$' è solitamente riservato per i componenti angolari-specifici.

+0

L'ordinazione ha risolto il problema – vlio20

+0

@ vlio20 che ordina esattamente? –

+0

Le risorse statiche, le librerie di terze parti. – vlio20