Тест ng: [объект ErrorEvent] брошен - PullRequest
0 голосов
/ 10 октября 2018

Я использую Angular 6.

При запуске

ng test

Я получаю сообщение об ошибке типа

ResetPasswordComponent should create
[object ErrorEvent] thrown

В консоли окна выдает

Uncaught Ошибка: Uncaught (в обещании): Ошибка: не может соответствовать ни один маршрут.Сегмент URL: 'auth / login'

Error: Cannot match any routes. URL Segment: 'auth/login'
at ApplyRedirects.noMatchError (VM4374 router.js:1455)
at CatchSubscriber.eval [as selector] (VM4374 router.js:1436)
at CatchSubscriber.error (VM4260 catchError.js:40)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at TapSubscriber._error (VM4280 tap.js:67)
at ApplyRedirects.noMatchError (VM4374 router.js:1455)
at CatchSubscriber.eval [as selector] (VM4374 router.js:1436)
at CatchSubscriber.error (VM4260 catchError.js:40)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at MapSubscriber.Subscriber._error (VM4156 Subscriber.js:90)
at MapSubscriber.Subscriber.error (VM4156 Subscriber.js:70)
at TapSubscriber._error (VM4280 tap.js:67)
at resolvePromise (VM4143 zone.js:813)
at resolvePromise (VM4143 zone.js:770)
at eval (VM4143 zone.js:872)
at ZoneDelegate.invokeTask (VM4143 zone.js:420)
at ProxyZoneSpec.onInvokeTask (VM4148 zone-testing.js:318)
at ZoneDelegate.invokeTask (VM4143 zone.js:419)
at Object.onInvokeTask (VM4143 zone.js:298)
at ZoneDelegate.invokeTask (VM4143 zone.js:419)
at Object.onInvokeTask (VM4151 core.js:4109)
at ZoneDelegate.invokeTask (VM4143 zone.js:419)
at 

Я создал auth модуль с компонентом ResetPasswordComponent.

AuthModule импортируется в auth-layout модуль и маршрутизациюопределяется в модуле auth-layout.

Содержимое AuthModule

@NgModule({
  imports: [
    CommonModule,
    ReactiveFormsModule,
    FormsModule,
    RouterModule
  ],
  declarations: [
    LoginComponent,
    LogoutComponent,
    ForgotPasswordComponent,
    ResetPasswordComponent
  ],
  exports: [
    LoginComponent,
    ForgotPasswordComponent,
    ResetPasswordComponent,
    LogoutComponent
  ]
})
export class AuthModule { }

В файле компонента нет auth/login.

Сброс -password.component.html В файле есть строка

<a routerLink="/auth/login">Login</a>

1 Ответ

0 голосов
/ 17 мая 2019

Это, вероятно, не имеет отношения к OP на данный момент, но для тех, кто сталкивается с подобной проблемой, и для которых ни одно из предоставленных решений для других связанных вопросов сработало или применимо, я оставлю это здесь.

Как и OP, у меня была ошибка [object ErrorEvent] thrown в окне Жасмин и сопровождающая ошибка в консоли:

Uncaught Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'members'
Error: Cannot match any routes. URL Segment: 'members'
at ApplyRedirects.push../node_modules/@angular/router/fesm5/router.js.ApplyRedirects.noMatchError
...

Также как OP, путь, указанный в ошибке , не был указан в спецификации или в компоненте, к которому принадлежала спецификация .

После нескольких попыток исправить ошибкуЯ наконец решил отключить спец.Затем ошибка перешла к следующей спецификации.Поэтому я проверил спецификацию и компонент, который запускался непосредственно перед , который был указан как «сбой».Конечно, в предыдущем компоненте была ссылка на путь в ошибке, однако его спецификация не регистрировала путь в вызове RouterTestingModule.withRoutes.

TLDR:

Если у вас есть спецификации для FirstComponent , SecondComponent и ThirdComponent , но ThirdComponent дает сбой при обстоятельствах, аналогичных описанным выше, тогда check SecondComponent , чтобы увидеть, есть ли там ссылка на маршрут.Если это так, создайте заглушку, объявите ее и добавьте в свой RouterTestingModule.withRoutes импорт с отсутствующим маршрутом.например,

...

describe('SecondComponent', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [
RouterTestingModule.withRoutes([{path:'missing/path',component:SecondComponent}])
      ],
      declarations: [ SecondComponent ]
    })
  })

  ...

})

@Component({selector:'app-second',template:''})
class SecondComponent {}

Надеюсь, это сэкономит кому-то время.Я потерял на этом часы, в основном потому, что слишком отчетливо воспринял отчет об ошибках.

...