Angular2中的模拟提供程序

时间:2017-01-31 15:01:01

标签: unit-testing angular

我想对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从未调用过?

0 个答案:

没有答案