Angular NgOnInit不同意茉莉花试验中模拟激活路线中的可观察值

Angular NgOnInit不同意茉莉花试验中模拟激活路线中的可观察值,angular,typescript,unit-testing,jasmine,Angular,Typescript,Unit Testing,Jasmine,我有一个非常简单的组件,如下所示。请假设所有相关进口 //my-component.component.ts //imports, decorator, etc. routingNumber: number; ngOnInit() { this.route.params.subscribe( params => { this.routingNumber = +params['id']; } ); } 我还有一个测试文件,如下所示。请再次假设

我有一个非常简单的组件,如下所示。请假设所有相关进口

//my-component.component.ts
//imports, decorator, etc.
routingNumber: number;
ngOnInit() {
    this.route.params.subscribe(
      params => {
    this.routingNumber = +params['id'];
      }
    );
}
我还有一个测试文件,如下所示。请再次假设所有相关的进口声明。我有一个mockActivatedRoute,我用它来代替实际的ActivatedRoute,它有一个相关的可观察的。我的印象是调用fixture.onChanges()将运行ngOnInit并将routingNumber属性值设置为被观察对象传递的值,但在运行测试时,它总是返回undefined

//my-component.component.spec.ts
//imports, describe, etc.

class mockActivatedRoute {
params = {
  subscribe() {
    return of({id: '1'});
  }
}

beforeEach(() => {
  TestBed.configureTestingModule({
    providers: [
      NoteService,
      {provide: ActivatedRoute, useClass: mockActivatedRoute},
      {provide: DataStorageService, useValue: dataServiceStub}
    ],
    declarations: [MyComponent],
    schemas: [NO_ERRORS_SCHEMA]
  }).compileComponents();
});

beforeEach(() => {
  fixture = TestBed.createComponent(MyComponent);
  component = fixture.componentInstance;
});

it('should expect 1 as the route parameter', async(() => {
  fixture.detectChanges();
  expect(component.routingNumber).toEqual(1); 
});
你可以试着像-

params = of({id: '1'});

params.subscribe(  params => { console.log(params)
})

params={subscribesubscribe
。这毫无意义。params应该是可观察的。而不是具有subscribesubscribe字段的对象。
params=of({id:'1'})
。对,抱歉,这是一个印刷错误。它应该是一个简单的subscribe()返回可观察值的函数。虽然是第二个,但这也没有多大意义。不管怎样,您的更改确实有效。是的,它有效。我测试了它。也许您还有其他问题。顺便说一句,您刚刚接受了答案,告诉您使用我建议您使用的内容。是的,我很匆忙地回答了您的答案。我输入了一些错误。再次。当我意识到这一点,并发现您的解决方案确实可以正常工作时,我在发布后不久更改了我的评论。感谢您的时间和帮助。