我正在尝试测试使用其他服务的组件.我想通过为服务提供模拟来隔离组件.在RC5之前,我可以简单地使用addproviders现在已经弃用的,并且将被下一个RC删除.相反,我必须使用TestBed.当我因某种原因提供模拟角度时,请继续寻找模拟所依赖的服务.然后抛出一个DI exception.当我提供所有依赖项时,测试工作,但我不想为每个测试套件重复自己.这打破了基本的OO原则.我的测试套件:
describe('Component: DummyRestApi', () => {
class DummyRestApiTestService {
GetAll() {
return Rx.Observable.create(observer => {
let data:Data[] = [];
data.push({
id: 0,
data: 'data'
});
observer.next(data);
observer.complete();
});
}
Add(data) {
}
}
let fixture;
let myMockWindow:Window;
// ToDo use the mocks
beforeEach(() => {
myMockWindow = <any> {location: <any> {hostname: '127.0.0.1'}};
TestBed.configureTestingModule({
declarations: [DummyRestApiComponent],
providers: [
// ServerAddressResolverService,
DummyRestApiComponent,
// ConfigurationService,
{provide: DummyRestApiService, useClass: DummyRestApiTestService},
// {provide: Window, useValue: myMockWindow}
],
imports: …Run Code Online (Sandbox Code Playgroud) 此问题描述了beforeEachProviders在不推荐使用该函数后如何更新Angular 2 .
但是这样做了,我得到了错误 Cannot read property 'injector' of null
我的测试相对基础:
import { inject, addProviders } from '@angular/core/testing';
import { MyComponent } from './my.component';
describe('Foo', () => {
beforeEach(() => {
addProviders([{
provide: MyComponent,
useClass: MyComponent
}]);
});
it('foo', inject([MyComponent], (e: MyComponent) => {
expect(true).toEqual(true);
}));
});
Run Code Online (Sandbox Code Playgroud)