Angular 如何模拟角度激活路线

Angular 如何模拟角度激活路线,angular,unit-testing,mocking,rxjs,router,Angular,Unit Testing,Mocking,Rxjs,Router,我的代码是ActivatedRoute,后面是subscribe export class MyComponent implements OnInit { constructor(private actr: ActivatedRoute) { this.actr.data.map(data => data.aList).subscribe((res) => { console.log('res ------------------------- '

我的代码是
ActivatedRoute
,后面是
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: [] });
 }

它们都不管用。

我想你应该这样嘲笑它:

class MockActivatedRouter {
  data = of({some: [] }); // Dont remember the old rxjs5 syntax but you might want to use Observable.of(...)
}
意味着
ActivatedRoute
有一个属性
data
,您可以在构造函数中订阅该属性

我通常只是用普通对象来模拟它,并作为
主体提供可观察性
,以便能够在测试中随时发射

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

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

事实证明,我们可以简单地做到:

class MockActivatedRouter {
  public map = (data) => of(MyResponse.data.aList);
}

class MyResponse {
  static data = {
     // data 
  }
}

什么是
map(data=>data.aList)
?这是一种可观察的方法吗rxjs@5? 或者此方法是在路由器配置/解析器中创建的?你如何提供你的模拟?请发布整个规范文件请为新的Angular2+使用angularjs标记,因为angularjs标记用于angular 1.x这不是个好主意,因为当有人来时,可能会稍微更改实现(例如在映射之前放置另一个操作符),测试将开始失败。