es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Angular test – Probando un método con variables locales

Necesito probar este método a continuación, pero tiene dos variables declaradas dentro de su bloque.

loadUsers() {
    this.secService.getAllUser().subscribe(
      (data: any) => {
        let Data = data;
        let user = <><any>>Data.User;
        this.users = user.filter(f => f.idc_situacao == 'A');
      },
      error => {
        this.util.showError(error);
      }
    );
  }

Básicamente, el servicio hace una petición http.get y solo devuelve los datos.

public getAllUser() {
    return this.http.get<any>(this.apiSecurity.concat("/user"));
  }

Prueba:

describe('#loadUsers', () => {
const users = [
  {
    Company: 'Test',
    User: [
      { name: 'Link', idc_situacao: 'A' },
      { name: 'Zelda', idc_situacao: 'I' },
    ],
  },
];
    it('test', () => {
      spyOn(secService, 'getAllUser').and.returnValue(of(users));
      component.loadUsers();
      expect(component.users).toEqual([{ name: 'Link', idc_situacao: 'A' }]);
    });
  });

Pero en el navegador, la prueba falla con el mensaje:
Se esperaba “undefined” para ser igual a [Object({ name: ‘Link’, idc_situacao: ‘A’ })]

Creo que es “undefined” porque hay dos variables locales. ¿Cómo puedo probar este método?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para probar el método loadUsers(), se puede utilizar el método TestBed.configureTestingModule() y simular el método getAllUser() del servicio utilizando el método spyOn().

    En el archivo de especificaciones, se pueden declarar las importaciones necesarias, como HttpClientModule y el servicio y agregarlas a los arreglos imports y providers, respectivamente.

    Luego, en el bloque beforeEach(), se puede crear una nueva instancia del componente e inyectar las dependencias necesarias, como el servicio y el módulo TestBed.

    Después, se puede utilizar el método spyOn() para simular el método getAllUser() del servicio y devolver un observable que contenga los datos de prueba.

    Finalmente, se puede llamar al método loadUsers() del componente y esperar que la propiedad users sea igual a los datos de prueba esperados.

    Aquí hay un ejemplo de fragmento de código:

    import { TestBed } from '@angular/core/testing';
    import { HttpClientModule } from '@angular/common/http';
    import { SecService } from './sec.service';
    import { AppComponent } from './app.component';
    import { of } from 'rxjs';
    
    describe('AppComponent', () => {
      let secService: SecService;
      let component: AppComponent;
    
      beforeEach(async () => {
        await TestBed.configureTestingModule({
          imports: [HttpClientModule],
          providers: [SecService],
          declarations: [AppComponent],
        }).compileComponents();
    
        secService = TestBed.inject(SecService);
        component = TestBed.createComponent(AppComponent).componentInstance;
    
        spyOn(secService, 'getAllUser').and.returnValue(of({ User: [{ name: 'Link', idc_situacao: 'A' }] }));
      });
    
      it('should load users', () => {
        component.loadUsers();
    
        expect(component.users).toEqual([{ name: 'Link', idc_situacao: 'A' }]);
      });
    });
    

    En este ejemplo, se crea el componente AppComponent e inyecta el servicio SecService en el módulo de pruebas. Se simula el método getAllUser() del servicio utilizando spyOn() y se retorna un observable con los datos de prueba.

    Luego, se llama al método loadUsers() del componente y se espera que la propiedad users contenga los datos de prueba esperados.

    Tenga en cuenta que la propiedad User de la respuesta HTTP no se utiliza en el método loadUsers(), por lo que se puede ignorar de forma segura en la prueba.

Comments are closed.