我的 services.js 文件变得非常大,因此我决定最好将各个服务拆分为单独的文件(service1.js、service2.js 等)。
不幸的是,这破坏了我所有的单元测试。我无法再将服务依赖项导入到我的测试中。当我运行单元测试时,我看到这样的错误:
Error: [$injector:unpr] Unknown provider: Service1Provider <- Service1
我在网络上找不到任何解决这些问题的文章。我的应用程序结构非常标准且 OOTB,与 angular-seed 没有什么不同。 (当然每个服务的单独文件除外)。
如果您需要更多信息,请告诉我。
最佳答案
我目前与 @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'
],
...
关于unit-testing - AngularJS 单元测试服务被分解为单独的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694351/