Angular2 RC5 Mock Activated Route Params

后端 未结 2 1569
庸人自扰
庸人自扰 2020-12-16 00:46

I need to be able to mock the activated route parameters to be able to test my component.

Here\'s my best attempt so far, but it doesn\'t work.

{ pro         


        
相关标签:
2条回答
  • 2020-12-16 01:19

    Answer given by @jonrsharpe allows you to mock params, but those params would be the same in every test.

    If you want to be able to change the params, to set it at the start of a test, you can do it like this:

    At the top:

    describe('SomeComponent', () => {
      (...)
      let params: Subject<Params>;
      (...)
    

    in beforeEach (the async one - where you have imports, providers etc.):

    beforeEach(async(() => {
      params = new Subject<Params>();
      (...)
    

    in providers:

      (...)
      {
        provide: ActivatedRoute,
        useValue: {
          params: params
        }
      }
      (...)
    

    and then in test:

    it('someTest', () => {
      params.next({'id': '123'});
      fixture.detectChanges();
      (...)
    

    IMPORTANT NOTE

    Be sure to call fixture.detectChanges after params.next.

    This means you should remove fixture.detectChanges from beforeEach and add it to every test.

    0 讨论(0)
  • 2020-12-16 01:20

    Your mock must reflect the object it's replacing. You .subscribe because it returns an observable, not just the object, so your mock value should too:

    import { Observable } from 'rxjs/Rx';
    
    ...
    
    { provide: ActivatedRoute, useValue: { 'params': Observable.from([{ 'id': 1 }]) } }
    
    0 讨论(0)
提交回复
热议问题