javascript - 将模拟服务注入(inject) Angular Testing 的未知问题

标签 javascript angularjs karma-runner karma-jasmine

这是我的模块声明:

(angular.module 'services.date', [])

.service '$date', () ->
  # stuff
  this

这是我的注入(inject)代码:

describe 'Service: dateService', () ->
  dateService = null
  beforeEach module 'services.date'
  beforeEach inject (_$date_) ->
    dateService = _$date_

  describe 'Test', () ->
    it 'should test stuff', () ->
      (expect true).toBe true

如果我运行这段代码,我会得到这个错误:

Firefox 37.0.0 (Ubuntu 0.0.0) Service: dateService Test should test stuff FAILED
    minErr/<@/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:68:12
    loadModules/<@/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:4411:15
    forEach@/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:336:11
    loadModules@/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:4372:5
    createInjector@/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:4297:11
    workFn@/home/pv/Sites/web/ngbp-coffee/vendor/angular-mocks/angular-mocks.js:2172:44

现在这是有趣的部分:如果我注释掉注入(inject)代码,则测试通过:

describe 'Service: dateService', () ->
  # dateService = null
  # beforeEach module 'services.date'
  # beforeEach inject (_$date_) ->
  #   dateService = _$date_

  describe 'Test', () ->
    it 'should test stuff', () ->
      (expect true).toBe true

//运行后

Firefox 37.0.0 (Ubuntu 0.0.0): Executed 1 of 1 SUCCESS (0.003 secs / 0.002 secs)

Done, without errors.

我如何注入(inject)错误的服务是怎么回事?请帮忙。

更新

看起来 $injector 服务无法识别我的其他服务。如果我这样做

$injector.has '$date'

我得到 false

WTF 我做错了吗?????

最佳答案

"Underscore Wrapping"仅当您不想使用注入(inject)的引用 (_ $date _) 隐藏变量 (dateService) 时才有用。这意味着使用 _ $date _ 仅在您想调用变量“$date”(而非 dateService)时才有用。

但是,这并不能解决您的问题。 $injector 应该有“$date”。如果没有更多代码,我想我们帮不了你。您的工厂声明或提供给 Karma 的配置文件可能有问题,因为很明显,“$date”尚未加载。

相同的代码对我有用(但是工厂是空的)。

关于javascript - 将模拟服务注入(inject) Angular Testing 的未知问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786916/

相关文章:

javascript - 只有 ReactOwner 可以有 refs。您可能正在向不是在组件的 render 方法中创建的组件添加 ref

javascript - 如何测试异步回调?

javascript - 切换元素类型但保持相同的 ID

json - Angular $http 服务 - 强制不解析对 JSON 的响应

angularjs - 使用 Ionic 构建时 apk 不更新更改

vue.js - 使用 Jasmine 在 Vue 组件中测试方法

javascript - 如何使用 ui-router 测试依赖于服务的 AngularJS Controller ?

javascript - 如何从输入中 append 带有效果的列表项

javascript - Angular JS 错误 : [$injector:nomod] Module 'portfolioMockupApp.services' is not available

angularjs - 使用 AngularJS 和 UI-Router 更新标题标签