我想对Angular2组件进行单元测试。由于我已经注册了其他依赖项,因此我想模拟其中的一些,尤其是那些生成服务器请求。
我使用Angular CLI修复了我的网站,因此在创建新组件时自动生成测试包装
所以我的beforeEach
是:
beforeEach(async(() => {
mockHttpService.get = jasmine.createSpy('mockHttpService.get').and.callFake(() => {return { subscribe: () => {} }});
TestBed.configureTestingModule({
declarations: [ MyComponent ],
//service substitution
providers: [{provide: Http, useValue: mockHttpService}, ...],
imports: [HttpModule]
})
.compileComponents();
}));
我为HTTP服务创建了模拟:
let mockHttpService = {get: () => {return { subscribe: () => {} }}};
我需要的全部内容 - 检查是否在OnInit阶段启动了请求。所以我有一个非常简单的测试:
it('should load dictionary data', () => {
spyOn(mockHttpService, 'get');
component.ngOnInit();
expect(mockHttpService.get).toHaveBeenCalled(); //NEVER CALLED
});
我已经清除了所有组件逻辑,并且在我的OnInit处理程序中有单行:
ngOnInit() {
this.http.get(url).subscribe(result => this.data = result.json());
}
为什么我的测试表明mockHttpService.get
从未调用过?