typescript - Ako otestovať jednotkový test pre void funkciu v Angulari?
Som nový v Angulari a testujem svoju komponentu Login, ktorá vyzerá nejako takto. Má funkciu handleLogin(), ktorá je void. Presmerováva na inú funkciu, ako je uvedené nižšie.
Ako môžem otestovať túto funkciu?. Presmeruje na inú funkciu, ktorá tiež presmeruje niekam inde. Ako otestovať takú komplexnú funkciu.
Odpoveď č. 1
it('should not be called redirect after login function', () => {
const loginService = TestBed.inject(LoginService);
const authService = TestBed.inject(AuthenticationService);
spyOn(authService, 'isLoggedIn').and.returnValue(false); // FALSE
component.ngOnInit();
expect(loginSerive.redirectAfterLogin).not.toHaveBeenCalled();
}
it('should be called redirect after login function', () => {
const loginService = TestBed.inject(LoginService);
const authService = TestBed.inject(AuthenticationService);
spyOn(authService, 'isLoggedIn').and.returnValue(true);
component.ngOnInit();
expect(loginSerive.redirectAfterLogin).toHaveBeenCalled();
}
it('should be called redirectToAuth function', () => {
const loginService = TestBed.inject(LoginService);
spyOn(loginService, 'redirectToAuth').and.callFake;
component. handleLogin();
expect(loginSerive.redirectToAuth).toHaveBeenCalled();
}
Odpoveď č. 2
Keďže je zapojená služba a mali by ste "UNIT" testovať komponent, mali by ste simulovať službu a očakávať, že jej metóda bola zavolaná, keď zavoláte metódu handleLogin na vašom komponente.
Niečo takéto:
import { LoginComponent } from './login.component';
import { LoginService } from '../../services/login.service';
import { AuthenticationService } from './auth.service';
describe('Component: Login', () => {
let component: LoginComponent;
let service: LoginService;
let spy: any;
beforeEach(() => {
service = new LoginService();
component = new LoginComponent(service);
});
afterEach(() => {
service = null;
component = null;
});
describe('Method: handleLogin', () => {
it('should call the `redirectToAuth` method on the `LoginService`', () => {
spy = spyOn(service, 'redirectToAuth');
component.handleLogin();
expect(spy).toHaveBeenCalled();
});
});
});
