2016-11-30 63 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创建它时 –