我正在努力测试一个注入了服务的 Angular2 组件。测试代码如下,但基本上是:
• SearchComponent 在构造函数中采用 FightService。
• 构造函数调用触发HTTP 请求的flightsService.getFlights()。flightService.getFlights() 返回一个 observable。
• 构造函数订阅了填充 allSummaryItems 数组的 observable 返回。
我的 MockFlightService 没有被使用,它基本上没有说没有 Http 提供者(在 FlightService 构造函数中)。如果我将 HttpModule 添加到 TestBed 中的提供程序,那么它会关闭并触发真正的 Http 请求。
如何确保我使用的是 MockFlightService?即使在触发真正的 Http 请求时,这也会正确测试 observable,我可以看到订阅的方法没有被调用?
谢谢
class MockFlightsService {
public getFlights = () => {
return new Observable<any>(() => { return dummyData.json(); });
};
}
describe('SearchComponent Tests', () => {
let fixture: ComponentFixture<SearchComponent>;
let component: SearchComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [SearchComponent],
imports: [RouterModule],
providers: [{ provide: FlightsService, useClass: MockFlightsService }]
});
fixture = TestBed.createComponent(SearchComponent);
fixture.detectChanges();
});
it('should render list', fakeAsync(() => {
fixture.whenStable();
component = fixture.componentInstance;
console.log(component.allSummaryItems); // this is empty, shouldn't be
}));
});
我正在使用 Angular 2.0.1。