gpt4 book ai didi

unit-testing - 带有模拟的 Angular 2 TestBed

转载 作者:太空狗 更新时间:2023-10-29 17:19:13 26 4
gpt4 key购买 nike

我正在尝试测试使用其他服务的组件。我想通过为服务提供模拟来隔离组件。在 RC5 之前,我可以简单地使用 addproviders,它现在已被弃用,将被下一个 RC 删除。相反,我必须使用 TestBed。当我出于某种原因提供模拟 Angular 时,请继续寻找模拟所依赖的服务。并抛出一个 DI 异常。当我提供所有依赖项时,测试工作正常,但我不想为每个测试套件重复自己。这打破了基本的 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: [FormsModule, HttpModule]
});
TestBed.compileComponents().catch(error => console.error(error));


// addProviders([
// DummyRestApiComponent,
// {provide: DummyRestApiService, useClass: DummyRestApiTestService},
// ]);
});


describe('Initializing', () => {

beforeEach(async(() => {
console.log('Compiling');
TestBed.compileComponents().catch(error => console.error(error));
console.log('Compiling again');
}));

it('should create an instance', async(() => {
var fixture = TestBed.createComponent(DummyRestApiComponent);
fixture.detectChanges();
expect(fixture.debugElement.componentInstance).toBeTruthy();
}
));

});

Angular 2.0.0-RC5

最佳答案

请注意,Patrick Ineichens 的回答使用了已弃用的 provide。

 providers: [provide(TodoService, { useValue: this.service })]

应该改为:

 providers: [{provide:TodoService, useValue: this.service }]

关于unit-testing - 带有模拟的 Angular 2 TestBed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com