Ошибка модульного тестирования (угловая): невозможно вызвать promise.then из теста синхронизации

У меня проблема, когда я пишу тест в angular, потому что я хочу протестировать маршрутизацию кнопки, но у меня возникла такая ошибка

это мой файл homepage.component.spec.ts (это не файл app.component.spec.ts)

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DebugElement } from '@angular/core';
import { HomepageComponent } from './homepage.component';
import { Router } from '@angular/router';
import { inject } from '@angular/core/src/render3';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from '../app.component';
import { RegisterpageComponent } from'../registerpage/registerpage.component';
import { Location } from '@angular/common';

describe('HomepageComponent', () => {
  let component: HomepageComponent;
  let fixture: ComponentFixture<HomepageComponent>;

beforeEach(async(() => {
  TestBed.configureTestingModule({
  imports: [RouterTestingModule],
  declarations: [ HomepageComponent,
                  AppComponent,
                  RegisterpageComponent ]
})
.compileComponents();
}));


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

it('should create', () => {
  expect(component).toBeTruthy();
});

// tslint:disable-next-line:prefer-const
let location: Location;
// tslint:disable-next-line:prefer-const
let router: Router;
// tslint:disable-next-line:prefer-const

router = TestBed.get(Router);
location = TestBed.get(Location);

router.initialNavigation();

it('navigate to "registerpage"', () => {
  router.navigate(['register']);
  expect(location.path()).toBe('/register');
 });
});

это файл app-routing.module.ts

import { ApplicationRef, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { Routes, RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
import { HomepageComponent } from './homepage/homepage.component';
import { RegisterpageComponent } from './registerpage/registerpage.component';

const routes: Routes = [
    { path: '',
    //   redirectTo: '/home',
         component: HomepageComponent,
         pathMatch: 'full' },


     { path: 'register',
       component: RegisterpageComponent}
  // { path: '**',
  //   component: PagenotfoundComponent }
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule],
})
export class AppRoutingModule { }

Я застрял в этом в течение недели и, кажется, без надежды, пожалуйста, помогите мне! Спасибо

ps. на самом деле я сбиваю с толку, что мне нужно писать тестовый код в файле AppComponent.spec.ts или нет

см. эту статью codecraft.tv/courses/angular/unit-testing/asynchronous вам поможет я думаю

Xin Meng 11.04.2018 11:47
0
1
5 252
1

Ответы 1

У меня была такая же проблема, и я задал этот вопрос во время поиска ответа.

Следующие строки следует переместить в beforeEach.

router = TestBed.get(Router);
location = TestBed.get(Location);
router.initialNavigation();

В полном объеме....

let location: Location;
let router: Router;

beforeEach(() => {
  fixture = TestBed.createComponent(HomepageComponent);
  component = fixture.componentInstance;
  fixture.detectChanges();

  router = TestBed.get(Router);
  location = TestBed.get(Location);
  router.initialNavigation();
});

Другие вопросы по теме