Подписки на Mocking Router для тестов Jasmine в Angular 6 - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть пара неудачных модульных тестов для компиляции моих компонентов.В любом случае это происходит из-за того, что мой код пытается сослаться на router.events или router.params:

router.params

ngDoCheck() {
   this.route.params.subscribe(
     () => {
       if (this.router.url !== this.url && this.levelOneState === 'maximized') {
         this.levelOneState = 'minimized';
       }
       this.url = this.router.url;
     }
   )
 }

router.events

this.router.events
  .pipe(
    find(e => e instanceof NavigationEnd)
  )
  .subscribe(() => {
    this.setCurrentNav();
  });

Я настроил свои тесты так:

let router;
router.events = of(new NavigationEnd(0, 'http://localhost:4200/', 'http://localhost:4200/'));

beforeEach(async(() => {
  TestBed.configureTestingModule({
    declarations: [
        ...
      { provide: Router, useValue: router }
    ]
  })
    .compilecomponents();
}));

Однако, когда я запускаю свои тесты с жасмином, я получаю сообщение об ошибке, чтоЯ не могу прочитать свойство подписаться на неопределенное.Кажется, я не могу найти никаких ответов или рекомендаций, чтобы понять, где я могу пойти не так.Кто-нибудь может предоставить некоторую информацию о том, как я могу настроить это по-другому?

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете создать класс RouterStub и инициализировать значения для макета Router в тестах.

class RouterStub {
   config = [];
   events = of({});
   params = of({});
   url = '';
   resetConfig() {}
   navigate() { }
}

Вы можете имитировать значения (url, params и т. Д.) В соответствии с вашим использованием в TestClass.
Используйте его в TestBedConfiguration:

beforeEach(async(() => {
           TestBed.configureTestingModule({
           declarations: [
            ...
             { provide: Router, useValue: new RouterStub()}
          ]
        })
        .compilecomponents();
       }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...