Ideas de prueba:
La dificultad de la prueba también aumenta gradualmente y cuanto más tiempo lleva. Si desea simplificar las pruebas, durante el desarrollo, debe aclarar conscientemente sus ideas y escribir código que sea simple y eficiente ~.
La pila de tecnología de prueba utilizada en este artículo: Angular12 + Jasmine Aunque la sintaxis de otras tecnologías de prueba es diferente, la idea general es similar. [Recomendación del tutorial relacionado: "tutorial angular"]
Consejos: Determinación del caso de prueba de Jasmine, cuáles son los métodos, puede encontrarlo aquí, haga clic en el componente en mi
, el valor predeterminado es la instancia del objeto a probar creado por Angular usando la siguiente sintaxis
beforeEach(() => { accesorio = TestBed.createComponent(BannerComponent); componente = accesorio.componentInstance; accesorio.detectChanges(); });
1. Llamada a función sin valor de retorno
prueba de función(índice:número,fn:Función){ si(nota){ fn(índice); } } ¿
Cómo realizar la prueba?
Ejemplo de contador: prueba directa del valor de retorno undefinido
const res = componente.test(1,() => {})); expect(res).tobeUndefinido();
Práctica recomendada:
# Utilice Jasmine it('debería obtener datos correctos al llamar a test',() =>{ parámetro constante = { fn: () => {} } spyOn(parámetro,'fn') componente.prueba(1,param.fn); esperar(param.fn).toHaveBeenCalled(); })
las instrucciones de estructura. Las palabras de uso común son ocultar, mostrar y bucles para mostrar dichas funciones
. @Directive({ selector: '[ImageURlError]' }) clase de exportación ImageUrlErrorDirective implementa OnChanges { constructor (el privado: ElementRef) {} @HostListener('error') error público() { this.el.nativeElement.style.display = 'ninguno'; } } ¿
Cómo realizar la prueba?
Idea de prueba:
#1. Agregue un componente personalizado y agregue la directiva personalizada @Component({. plantilla: `<div> <image src="https://xxx.ss.png" ImageURlError></image> </div>` }) clase TestHostComponent { } #2. Cree una instancia de la vista del componente personalizado y envíe el evento de error. antes de cada(waitForAsync(() => { TestBed.configureTestingModule({ declaraciones: [ componenteHostdeprueba, Error de URL de imagen ] }); })); antes de cada uno(() => { accesorio = TestBed.createComponent(TestHostComponent); componente = accesorio.componentInstance; accesorio.detectChanges(); }); it('debería permitir solo números', () => { evento constante = nuevo ErrorEvent('error', {} como cualquiera); imagen const = fix.debugElement.query(By.directive(ImageURlError)); image.nativeElement.dispatchEvent(event); // Simplemente envíe el evento y el método error() se ejecutará en este momento});
.en angular, spec
.ts puede acceder; pero no se permiten modificaciones privadas y protegidas;
toque la pizarra
evento de clic La activación del evento de clic puede incluir una llamada directa a js o imitar el mouse para activar el evento de clic.
#xx.componente.ts @Componente({ selecotr: 'lista-de-héroes-del-panel' }) clase DashBoardHeroComponent { tarjetas públicas = [{ haga clic en: () => { ..... } }] } #html <dashboard-hero-list [tarjetas]="tarjetas" clase="tarjeta"> </dashboard-hero-list>`
¿Cómo realizar la prueba?
Idea de prueba:
('debe obtener datos correctos cuando llame al clic', () => { tarjetas constantes = tarjetas.componentes; ¿tarjetas?.forEach(tarjeta => { si(tarjeta.clic){ card.click(nuevo evento('clic')); } }); esperar(tarjetas?.longitud).toBe(1); });
Otras ideas de referencia de clic:
Idea 1:
Idea 2:
pruebe el componente directamente, sin usar Host
y luego use fix.nativeElement.querySelector('.card') para encontrar el elemento de clic vinculado
use triggerEventHandler('click');