这是我的模块声明:
(angular.module 'services.date', [])
.service '$date', () ->
# stuff
this
这是我的注射码:
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
现在这里有趣的部分:如果我注释掉注射代码,测试通过:
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.
关于我如何注入错误的服务有什么用?请帮忙。
更新
看起来$injector
服务无法识别我的其他服务。如果我做
$injector.has '$date'
我得到false
WTF我做错了?????
答案 0 :(得分:0)
"Underscore Wrapping"仅在您不想使用注入的引用(_ $ date _)隐藏变量(dateService)时才有用。这意味着使用_ $ date _仅在您想要调用变量“$ date”(而不是dateService)时才有用。
但是,它无法解决您的问题。 $ injector应该有'$ date'。我想如果没有更多的代码,我们无法帮助你。你的工厂声明或给予Karma的配置文件可能有些问题,因为很明显,“$ date”尚未加载。
相同的代码对我有用(但是空工厂)。