2

我的 services.js 文件变得非常大,所以我决定最好将各个服务拆分为单独的文件(service1.js、service2.js 等)。

不幸的是,这破坏了我所有的单元测试。我不再能够将服务依赖项导入我的测试。我在运行单元测试时看到这样的错误:

Error: [$injector:unpr] Unknown provider: Service1Provider <- Service1

我在网上找不到任何解决这些问题的文章。我的应用程序结构非常标准且 OOTB,与angular-seed没有什么不同(当然,每个服务的单独文件除外)。

如果您需要更多信息,请告诉我。

4

1 回答 1

2

我目前使用@mtical,结果发现错误确实在 karma.conf.js 中。正如他所说,我们将服务拆分为多个文件,我们的主要服务文件名为“service.js”。默认情况下,karma 会以递归字母顺序加载 karma.conf.js 文件中未明确列出的所有 js 文件。

这导致我们的“service.js”文件在我们所有其他服务文件之后加载,这些文件按字母顺序列出在该文件之前。不幸的是,所有这些其他服务都有“service.js”作为依赖项,所以当我们的测试运行时,他们无法找到我们需要的服务。

解决方案是在递归加载我们的 karma.conf.js 文件中的其他文件之前显式列出“service.js”,如下所示:

...
files : [
      'app/lib/angular/angular.js',
      'app/lib/angular/angular-*.js',
      'test/lib/angular/angular-mocks.js',
      'app/js/services/services.js',
      'app/js/**/*.js',
      'test/unit/**/*.js'
    ],
...
于 2013-12-20T16:05:25.707 回答