因果报应测试中的未知提供者

Unknown provider in Karma test

本文关键字:未知 提供者 测试 因果报应      更新时间:2024-02-25

我有以下提供者:

(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);

在app.js中,我是这样使用它的:

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

在测试之前,每件事都很好。这是我的测试:

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);
  });
});

当运行测试时,我得到以下错误:

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

注意:$_ConfigProvider在运行时正确注入。

您可能没有在karma.conf.js依赖项列表中包含定义提供程序的文件。请参阅此问题:

在Angular应用程序的Karma测试文件中包含依赖项?

我会将$_Config重命名为其他名称,"$"通常是为特定角度的组件保留的。