2015-09-25 57 views
4

未知的問題這是我的模塊聲明:注入模擬服務轉變爲角測試

(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 
    [email protected]/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:336:11 
    [email protected]/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:4372:5 
    [email protected]/home/pv/Sites/web/ngbp-coffee/vendor/angular/angular.js:4297:11 
    [email protected]/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. 

這是關於我如何注入這是錯誤的服務?請幫忙。

UPDATE

它看起來像$injector服務不能識別我的其他服務。如果我做

$injector.has '$date' 

我得到false

WTF我做錯了?????

+0

我發現在運行單元測試時排序依賴關係非常重要。你確定你在dateService之前包含你的$ date嗎? – loddn

+0

是的,所有依賴項都按順序加載。 – dopatraman

+0

如果您在第一個beforeEach之前留下錯誤,是否有錯誤? –

回答

0

"Underscore Wrapping"僅當您不想用注入引用(_ $ date _)隱藏變量(dateService)時纔有用。這意味着使用_ $ date _只在您想調用變量「$ date」(不是dateService)時纔有用。

但是,它不能解決您的問題。 $注射器應該有'$日期'。我想我們沒有更多的代碼就無法幫到你。你的工廠聲明或給Karma的配置文件可能有問題,顯然,「$ date」尚未加載。

相同的代碼正在爲我工​​作(但是有一個空的工廠)。