2017-08-23 4 views
0

Ich möchte einige Komponententests für meine Komponente schreiben, ohne die externe Vorlage zu berühren. Aber ich weiß nicht, wie man einen Dienst verspottet, von dem meine Komponente abhängt.Wie man einen Dienst spottet, ohne TestBed zu verwenden

my-component.ts

@Component({ 
    selector: 'my-component', 
    templateUrl: './my-component.component.html', 
    styleUrls: ['./my-component.component.scss'] 
}) 
export class MyComponent { 

    constructor(public service: AnotherService) {} 

} 

my-component.spec.ts

let component: MyComponent; 

beforeEach(() => { 
    myComponent = new MyComponent(null); 
}); 

another.service.ts

@Injectable() 
export class AnotherService { 
    toto: string; 
} 

Das funktioniert aber statt null Ich möchte AnotherService verspotten, so habe ich ein Mock-Service:

class AnotherServiceStub { 
    toto: string 
} 

und

myComponent = new MyComponent(<AnotherService> new AnotherServiceStub()); 

Aber mit ActivatedRoute zum Beispiel

component = new MyComponent(<ActivatedRoute> {}); 

funktioniert nicht. Typescript bat mich, alle Attribute der ActivatedRoute-Klasse in meinen Mock wie url, params, queryParams usw. hinzuzufügen. Wie kann ich das vermeiden?

+1

'myComponent = new MeineKomponente ({toto: 'something'});'? – jonrsharpe

+0

@jonrsharpe danke, aber es funktioniert nicht, weil ich Typescript verwende, die den Typ des Parameters überprüft. –

+0

Wenn Ihr Mock dieselbe Signatur hat, wird es funktionieren. Es ist das Gleiche, als wenn man Mocks durch die Anbieter des Testbetts injiziert. Können Sie ein weniger abstraktes Beispiel geben? – jonrsharpe

Antwort

0

Dienst spottet, dass vollständig auf die Schnittstelle der ursprünglichen Klasse entsprechen, können zur Verfügung gestellt werden wie:

myComponent = new MyComponent(stub); 

Wenn ein Modell an die Schnittstelle teilweise entspricht und Typprüfung nicht besteht, kann type assertion verwendet werden:

myComponent = new MyComponent(<AnotherService>stub); 

Wenn Typen überhaupt nicht übereinstimmen, kann doppelte Behauptung verwendet werden:

myComponent = new MyComponent(<AnotherService><any>stub); 
+0

Danke, die doppelte Behauptung funktioniert gut –

Verwandte Themen