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?
'myComponent = new MeineKomponente ({toto: 'something'});'? – jonrsharpe
@jonrsharpe danke, aber es funktioniert nicht, weil ich Typescript verwende, die den Typ des Parameters überprüft. –
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