
Ideias de teste:
A dificuldade do teste também aumenta gradualmente e mais tempo leva. Se você deseja simplificar os testes, durante o desenvolvimento, você deve esclarecer conscientemente suas ideias e escrever um código que seja simples e eficiente ~.
A pilha de tecnologia de teste usada neste artigo: Angular12 + Jasmine Embora a sintaxe de outras tecnologias de teste seja diferente, a ideia geral é semelhante. [Recomendação do tutorial relacionado: "tutorial angular"]
Dicas: Determinação do caso de teste Jasmine, quais são os métodos, você pode encontrá-los aqui, clique no componente em meu
, o padrão é a instância do objeto a ser testado criado por Angular usando a seguinte sintaxe
beforeEach(() => {
fixture = TestBed.createComponent(BannerComponent);
componente = fixture.componentInstance;
fixture.detectChanges();
}); 1. Chamada de função sem valor de retorno
function test(index:number,fn:Function){
se(fn){
fn(índice);
}
} Como testar?
Exemplo de contador: testando diretamente o valor de retorno undefined
const res = component.test(1,() => {}));
expect(res).tobeUndefined(); Prática recomendada:
# Use Jasmine
it('deve obter dados corretos ao chamar o teste',() =>{
parâmetro const = {
fn: () => {}
}
espião(param,'fn')
componente.teste(1,param.fn);
expect(param.fn).toHaveBeenCalled();
}) instruções de estrutura Palavras comumente usadas são ocultação, exibição e loops for para exibir tais funções
.
@Directive({seletor: '[ImageURlError]' })
classe de exportação ImageUrlErrorDirective implementa OnChanges {
construtor (el privado: ElementRef) {}
@HostListener('erro')
erro público() {
this.el.nativeElement.style.display = 'nenhum';
}
} Como testar?
Ideia de teste:
#1. . Adicione um componente personalizado e adicione a diretiva personalizada @Component({
modelo: `<div>
<image src="https://xxx.ss.png" ImageURlError></image>
</div>`
})
classe TestHostComponent {
}
#2. Instancie a visualização do componente personalizado e envie errorEvent
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
declarações: [
TestHostComponent,
ImageURlError
]
});
}));
beforeEach(() => {
fixture = TestBed.createComponent(TestHostComponent);
componente = fixture.componentInstance;
fixture.detectChanges();
});
it('deve permitir apenas números', () => {
evento const = new ErrorEvent('erro', {} como qualquer);
imagem const = fixture.debugElement.query(By.directive(ImageURlError));
image.nativeElement.dispatchEvent(event); //Basta despachar o evento e o método error() será executado neste momento}); . .ts pode acessar; mas modificações privadas e protegidas não são permitidas,
bata no quadro-negro
O acionamento do evento de clique pode incluir js direto chamando clique ou imitando o mouse para acionar o evento de clique.
#xx.component.ts
@Componente({
selecotr: 'lista de heróis do painel'
})
classe DashBoardHeroComponent {
cartões públicos = [{
clique em: () => {
.....
}
}]
}
#html
<dashboard-hero-list [cartões]="cartões" class="cartão">
</dashboard-hero-list>` Como testar?
Idéia de teste:
('deve obter dados corretos quando chamar click', () => {
cartões const = componente.cards;
cartões?.forEach(cartão => {
if(cartão.clique){
card.click(novo Evento('clique'));
}
});
esperar(cartões?.comprimento).toBe(1);
}); Outras ideias de referência de clique:
Ideia 1:
Idéia 2:
teste o componente diretamente, sem usar Host
e depois use fixture.nativeElement.querySelector('.card') para encontrar o elemento de clique vinculado
use triggerEventHandler('click');