Como escrever teste de unidade para método no componente Angular usando jasmim?
Sep 22 2020
Eu sou novo no teste de unidade de jasmim, mas não tenho certeza de como escrever e como funciona no jasmim. Realmente enfrentando muitos erros.
Alguém pode me ajudar a escrever um teste de unidade para o código abaixo?
app.component.html
<a href="" class="black" id="upload-template" (click)="uploadTemplate($event)" style="position: relative">
<img style="width: 45px" src="/assets/images/icons/upload (1).png" alt="upload the model" />
<div>Upload Template</div>
<i *ngIf="uploadTempStatus" class="fas fa-check-circle fa-2x upload-check" aria-hidden="true"></i>
</a>
app.component.ts
uploadTemplate(e) {
e.preventDefault();
this.clearMsg();
if (this.selectedModel == null) {
this.messageService.add({ severity: 'error', summary: 'Please option from dropdown', detail: 'Please contact Admin', sticky: true });
} else if (this.selectedModel.name == 'Classification') {
this.router.navigate(['router_one'], { state: { data: this.selectedModel } });
} else {
this.router.navigate(['router_two'], { state: { data: this.selectedModel } });
}
}
arquivo de especificação
function newEvent(eventName: string) {
const event = document.createEvent('CustomEvent');
event.initCustomEvent(eventName, false, false, null);
return event;
}
it('should be ok uploadTemplate', async(() => {
const uploadT = fixture.debugElement.query(By.css('#upload-template'));
expect(uploadT).toBeDefined();
const uploadTNativeElement = uploadT.nativeElement;
expect(uploadTNativeElement).toBeDefined();
fixture.detectChanges();
uploadTNativeElement.dispatchEvent(newEvent('click'));
//uploadTNativeElement.dispatchEvent(new Event('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
spyOn(component, 'uploadTemplate').and.callThrough();
expect(component.uploadTemplate).toHaveBeenCalled();
});
}));
erro: Esperava-se que o spy uploadTemplate fosse chamado.
Respostas
1 uminder Sep 22 2020 at 12:23
O método do componente espião uploadTemplatedeve ser criado antes que o evento click seja despachado. Tente alterar o teste de unidade da seguinte maneira:
it('should be ok uploadTemplate', async(() => {
...
spyOn(component, 'uploadTemplate').and.callThrough();
uploadTNativeElement.dispatchEvent(newEvent('click'));
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(component.uploadTemplate).toHaveBeenCalled();
});
}));
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas