2016-11-30 116 views
0

我正在使用angular-cli並試圖進入測試服務的習慣,但我似乎無法將服務注入測試,這裏是我的情況:Angular-cli - 測試服務

Angular2服務

@Injectable() 
export class AppService{ 
} 

噶測試 - V1.3.0

這是正確的語法?它似乎在整個angular2的最初版本中都發生了變化。

describe('Tests',() => { 
    beforeEach(() => [ 
    {provide: AppService, useClass: AppService} 
    ]); 

    it('should create an instance', inject([AppService], (service: AppService) => { 
    expect(service).toBeTruthy(); 
    })); 
}); 

這是正確的語法嗎?它似乎在整個angular2的最初版本中都發生了變化。

測試錯誤

Tests should create an instance FAILED 
    Error: No provider for AppService! 

我的配置

angular-cli: 1.0.0-beta.21 
node: 6.5.0 
os: win32 x64 

回答

2

如果要注入它,你仍然需要使用TestBed配置角度測試環境

import { TestBed } from '@angular/core/testing'; 

beforeEach(() => TestBed.configureTestingModule({ 
    providers: [ {provide: AppService, useClass: AppService} ] 
})); 

*注意:**如果服務沒有任何其他依賴項,您可能只想忘記Angular配置,只需通過自己實例化服務來執行獨立測試。有關使用最新版本的測試更多的細節

+0

感謝您的幫助,讓它工作!很好,我忘了現在的angular2文檔有多詳細。它似乎只與'useValue:'工作,但是,任何想法爲什麼這有效? –

+1

咦?你的意思是當你做'新的AppService()'。如果是這樣,那麼我的意思是你應該忘記整個TestBed配置,並自己爲測試創建一個新實例。否則,第一個代碼仍然可以正常工作,但它可以簡化爲「提供程序:[AppService]」 –

+0

而且'useValue'是您希望使用自己創建的實例的時候。 'useClass'只有當你想讓Angular創建它時 –