Angular提供程序未在测试平台中使用模拟类

时间:2019-03-20 16:47:07

标签: angular unit-testing jasmine

我试图为我的Angular组件之一编写单元测试,该组件从Web服务调用获取数据。一切运行正常,但是Angular测试平台始终使用真实的服务调用,而不是提供的模拟服务类。我正在使用Angular 6和Jasmine 3。

这是规格文件,如您所见,我正在提供一个模拟服务,该服务返回带有我的预定义数据的可观察对象。

export class MyComponent implements OnInit {

  data : any;

  constructor(private myService: MyService) { }

   ngOnInit() {
     this.myService.getData().subscribe(
     response =>{
       this.data = response;
     },
     error =>{
       console.log("ERROR");
     });
   }
}

我这里缺少什么吗?当测试平台创建MyComponent时,应该将我的MockService注入组件中,这不是MyService正确吗?我只是想不通,任何帮助都会很棒。

这是我正在测试的简单组件。

class Jobs {
//...

  /**
   * Tasks of Jobs
   * @var $tasks array
   */
   protected $tasks;

}

1 个答案:

答案 0 :(得分:0)

我敢打赌,第二个compileComponents()方法运行时beforeEach()并不完整,因为它是从带有同步lambda的同步beforeEach()方法运行的-Jasmin应该为您有所帮助如果只是让lambda异步。

从文档中

beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ BannerComponent ]
    })
    .compileComponents();
  }));

请参见https://angular.io/guide/testing#compilecomponents-is-async