Угловое модульное тестирование TypeError: Невозможно прочитать свойство 'subscribe' из неопределенного - PullRequest
0 голосов
/ 10 декабря 2018

Я создаю шаблон стартового комплекта с аутентификацией и пример с CRUD (https://github.com/fransyozef/basic-login-angular)

. Теперь я новичок в модульном тестировании и пытаюсь хотя бы запустить тестирование компонентов.создаются, но я застреваю с

TypeError: Cannot read property 'subscribe' of undefined

Я думаю, что ошибка исходит от

  resolveRoute() {
    this.route.params.subscribe(params => {
      if (params['id']) {
        this.id = +params['id'];
        this.getItem();
      } else {
        this.handleItemNotFound();
      }
     });
  }

в файле https://github.com/fransyozef/basic-login-angular/blob/master/src/app/items/item-edit/item-edit.component.ts

Сейчас у меня естьфайл теста: https://github.com/fransyozef/basic-login-angular/blob/master/src/app/items/item-edit/item-edit.component.spec.ts

Может кто-нибудь помочь мне с этим?

1 Ответ

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

Вы должны издеваться над своей стратегией маршрутизации.Как я вижу, вы используете routingModule внутри вашего TestBed imports.Предположим, что ваши собственные routingModule предоставляют только свои собственные маршруты и не смогут имитировать / шпионить за другими маршрутами.Поэтому я рекомендую вам сначала настроить Test helper routes внутри test.helper.ts

export const TestRoutingImports = [
  HttpClientTestingModule,
  RouterTestingModule, // <-- Use RouterTestingModule instead
]; 

Модули (RouterTestingModule) настраивают маршрутизатор, который будет использоваться для тестирования.Он предоставляет шпионские реализации Location, LocationStrategy и NgModuleFactoryLoader.

RouterTestingModule предоставляет макеты, RouterModule нет.

Второе, что вам нужно сделать, это удалить свойprovide с испытательного стенда.Это здесь не обязательно.Я имею в виду следующую часть:

{
  provide: ActivatedRoute, useValue: {
     snapshot: { params: { id: 1 } }
  }
},

Удалите это, потому что это будет Переопределением поставщиков компонентов.В вашем случае это не нужно.

Я надеюсь, что смогу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...