首页 > 解决方案 > 如何模拟角度ActivatedRoute

问题描述

我有这个代码ActivatedRoutemap后跟subscribe.

export class MyComponent implements OnInit {

    constructor(private actr: ActivatedRoute) {

    this.actr.data.map(data => data.aList).subscribe((res) => {
        console.log('res ------------------------- ', res); // It is not showing this.
        this.myResponse = res;
    });
}

   ngOnInit() {
      // some code
      // myResponse is undefined
   }

}

我在规范文件中尝试过:

class MockActivatedRouter {

    public map = (data) => data.aList = of({some: [] });
    // Or 
    public map = (data) => of({some: [] });
 }

它们都不起作用。

标签: angularunit-testingmockingrxjsrouter

解决方案


我想你想像这样模拟它:

class MockActivatedRouter {
  data = of({some: [] }); // Dont remember the old rxjs5 syntax but you might want to use Observable.of(...)
}

MeansActivatedRoute有一个属性data,您可以在构造函数中订阅该属性。

我通常只用普通对象来模拟它,并提供 observableSubject以便能够在测试中随时发出。

我想你知道如何在测试中提供你的模拟:

TestBed.configureTestingModule({
  ...
  providers: [{
    provide: ActivatedRoute,
    useClass: MockActivatedRouter
  }]
});

推荐阅读