gentlyawesome
gentlyawesome

Reputation: 172

Testing route in Angular6

I'm new to Angular6 where I want to test my routing but got an error saying:

Failed: Component HomeComponent is not part of any NgModule or the module has not been imported into your module.

I don't understand how I ended up with that when I have already imported HomeComponent to my app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { HomeComponent } from './home/home.component';

export const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', component: HomeComponent } 
];

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

export const routingComponents = [
  HomeComponent
]

in my app.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { HomeComponent } from './home/home.component';

export const routes: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', component: HomeComponent } 
];

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

export const routingComponents = [
  HomeComponent
]

app.component.spec.ts

import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';

import { AppComponent } from './app.component';
import { routes } from './app-routing.module';

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

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

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

  it('should create the app', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
  }));

  it("should have as title 'ba-dashboard'", async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app.title).toEqual('ba-dashboard');
  }));

});

The error appears when I add .withRoutes(routes) in my app.component.spec.ts

Upvotes: 0

Views: 592

Answers (3)

Mustafa Kunwa
Mustafa Kunwa

Reputation: 867

You Must Add Home Component as declaration in @NgModule

 @NgModule({ 
     imports: [RouterModule.forRoot(routes)], 
     exports: [RouterModule],   
     declarations: [HomeComponent]
 })

Upvotes: 0

BJT
BJT

Reputation: 658

You have missing HomeComponent in test declarations, and as sad above you have missing HomeComponent in app.module declarations

import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';

import { HomeComponent } from './home.component';
import { AppComponent } from './app.component';
import { routes } from './app-routing.module';

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        RouterTestingModule.withRoutes(routes);
      ],
      declarations: [
        AppComponent,
        HomeComponent // missing declaration
      ],
    }).compileComponents();
  }));

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

  it('should create the app', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
  }));

  it("should have as title 'ba-dashboard'", async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app.title).toEqual('ba-dashboard');
  }));

});

Upvotes: 1

Puneet
Puneet

Reputation: 1741

you are missing declaration in your app.module.ts file

@NgModule({
  declarations: [
       HomeComponent 
]
})

Upvotes: 0

Related Questions