unit-testing - AngularJS 单元测试服务被分解为单独的文件

标签 unit-testing angularjs angularjs-service angular-seed

我的 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/

相关文章:

javascript - 管理我的数组值

javascript - 自定义 Angular Directive(指令)中的 ng-switch 打破了双向绑定(bind)

javascript - 如何使用angular js显示对象数组的分组

angularjs - Angular 将服务属性绑定(bind)到 Controller 范围

angularjs - 如何使用不污染全局范围的 TypeScript 类定义 AngularJS 服务?

javascript - 如何将 $stateParams 从 ui-router 传递到 resolve 服务?

unit-testing - grails 单元测试 spock 问题

java - 如何在单元测试期间将 gwteventbinder 与 guice 一起使用

c++ - 如何使用 Boost 单元测试框架测试 Qt 应用程序

c++ - 如何在内联回调函数中使用 EXPECT_EQ 和其他 Google Mock 语句?