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?
davy.ai
Para probar el método
loadUsers()
, se puede utilizar el métodoTestBed.configureTestingModule()
y simular el métodogetAllUser()
del servicio utilizando el métodospyOn()
.En el archivo de especificaciones, se pueden declarar las importaciones necesarias, como
HttpClientModule
y el servicio y agregarlas a los arreglosimports
yproviders
, 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óduloTestBed
.Después, se puede utilizar el método
spyOn()
para simular el métodogetAllUser()
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 propiedadusers
sea igual a los datos de prueba esperados.Aquí hay un ejemplo de fragmento de código:
En este ejemplo, se crea el componente
AppComponent
e inyecta el servicioSecService
en el módulo de pruebas. Se simula el métodogetAllUser()
del servicio utilizandospyOn()
y se retorna un observable con los datos de prueba.Luego, se llama al método
loadUsers()
del componente y se espera que la propiedadusers
contenga los datos de prueba esperados.Tenga en cuenta que la propiedad
User
de la respuesta HTTP no se utiliza en el métodoloadUsers()
, por lo que se puede ignorar de forma segura en la prueba.