2016-08-08 90 views
1

Ich versuche die Heroes-Komponente der 'Tour of Heroes' Angular 2 Tutorial zu verhöhnen. Aber ich weiß nicht, wie ich den Router verspotten soll, der für die Instanziierung der HeroesComponent benötigt wird. Ich habe versucht, einen Spy mit Jasmine zu erstellen, aber das funktioniert nicht, weil die Eigenschaft 'RootComponentType' fehlt.Mocking Components mit Angular 2

Wie kann ich das schaffen?

import {HeroesComponent} from "./heroes.component"; 
import {Router} from "@angular/router-deprecated"; 
import {HeroService} from "./hero.service"; 


describe('HeroesComponent',() => { 
    let heroes:HeroesComponent; 
    let router:Router; 
    let service:HeroService; 
    beforeEach(() => { 
     router = jasmine.createSpyObj('Router', ['navigate']); 
     service = new HeroService(/* I will care about this later */); 
     heroes = new HeroesComponent(router, service); 
    }); 
    it('should be defined',() => { 
     expect(heroes).toBeDefined(); 
    }); 
}); 

Es arbeitet jetzt:

describe('HeroesComponent',() => { 
    let router:any; 
    let heroesComponent:HeroesComponent; 
    let service:HeroService; 

    beforeEach(() => { 
     router = new class { 
      navigate = jasmine.createSpy("navigate"); 
     }; 
     heroesComponent = new HeroesComponent(router, service); 
    }); 
    it('should be defined',() => { 
     expect(heroesComponent).toBeDefined(); 
    }); 
}); 

Antwort

1

Sie einen Spion auf einem Navigate-Methode direkt erstellen können.

  1. Mit addProviders für DI:

    beforeEach(() => addProviders([ 
    { 
        provide: Router, 
        useClass: class { navigate = jasmine.createSpy("navigate"); } 
    }])); 
    
  2. Für eine direkt Initialisierung einer Komponente:

    let router; 
    let heroesComponent; 
    
    beforeEach(() => { 
        router = new class { navigate = jasmine.createSpy("navigate"); }; 
        heroesComponent = new HeroesComponent(router); 
    }); 
    
+0

Danke, aber wie kann ich den HeroesComponent Konstruktor mit dem Anbieter liefern ? – JoCa

+0

@JoCa hat die Antwort entsprechend angepasst. –