CursosEmpresasBlogLiveConfPrecios

Pruebas al login

Clase 22 de 25 • Curso de Angular: Unit Testing para Servicios

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    Unit testing para servicios en Angular

    Unit testing para servicios en Angular

    00:56 min
  • 2
    Jest vs. Jasmine: entornos de testing para Angular

    Jest vs. Jasmine: entornos de testing para Angular

    13:39 min

Fundamentos de unit testing en Angular

  • 3
    Tu primera prueba en Angular

    Tu primera prueba en Angular

    10:03 min
  • 4
    Explorando matchers

    Explorando matchers

    09:46 min
  • 5
    Reporte de coverage

    Reporte de coverage

    10:13 min
  • 6
    Mocha Report

    Mocha Report

    07:42 min

Testing en servicios

  • 7
    Pruebas unitarias para servicios

    Pruebas unitarias para servicios

    15:55 min
  • 8
    Servicios con dependencias

    Servicios con dependencias

    17:52 min
  • 9
    Spies

    Spies

    10:38 min
  • 10
    Angular TestBed

    Angular TestBed

    04:55 min
  • 11
    TestBed + Spies

    TestBed + Spies

    09:21 min

Proyecto

  • 12
    Setup y maquetación del proyecto

    Setup y maquetación del proyecto

    10:55 min
  • 13
    Product Service Http

    Product Service Http

    12:31 min

Testing en consultas HTTP

  • 14
    HttpClientTestingModule

    HttpClientTestingModule

    16:57 min
  • 15
    Generando Mocks

    Generando Mocks

    08:22 min
  • 16
    Pruebas para GET

    Pruebas para GET

    09:10 min
  • 17
    Pruebas maliciosas para GET

    Pruebas maliciosas para GET

    09:54 min
  • 18
    Pruebas para POST

    Pruebas para POST

    13:51 min
  • 19
    Pruebas para PUT y DELETE

    Pruebas para PUT y DELETE

    05:23 min

Bonus

  • 20
    Pruebas a errores

    Pruebas a errores

    12:38 min
  • 21
    Pruebas con interceptores

    Pruebas con interceptores

    12:43 min
  • 22
    Pruebas al login

    Pruebas al login

    Viendo ahora
  • 23
    Pruebas a la API del navegador

    Pruebas a la API del navegador

    14:01 min
  • 24
    GitHub Actions

    GitHub Actions

    21:24 min

Próximos pasos

  • 25
    Toma el Curso de Angular: Unit Testing para Componentes

    Toma el Curso de Angular: Unit Testing para Componentes

    01:04 min
Tomar el examen del curso
    Andrés Quintero Arias

    Andrés Quintero Arias

    student•
    hace 4 años

    Para los métodos que no retornan nada, cuando se quiere espiar una función, pero que no ejecute el método , se le pone en el spyOn el and.callThrough():

    spyOn(tokenService, 'saveToken').and.callThrough()
    Cesar Elías Armendariz Ruano

    Cesar Elías Armendariz Ruano

    student•
    hace 4 años

    para poder hacer pruebas al login es basicamente verificar el autentificador de Auth.service

    auth.model.ts

    export interface Auth {   access_token: string; }

    auth.service.ts

    import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { switchMap, tap } from 'rxjs/operators'; import { BehaviorSubject } from 'rxjs'; import { environment } from './../../environments/environment'; import { Auth } from './../models/auth.model'; import { User } from './../models/user.model'; import { TokenService } from './../services/token.service'; @Injectable({   providedIn: 'root' }) export class AuthService {   private apiUrl = `${environment.API_URL}/api/v1/auth`;   private user = new BehaviorSubject<User | null>(null);   user$ = this.user.asObservable();   constructor(     private http: HttpClient,     private tokenService: TokenService   ) {   }   getCurrentUser() {     const token = this.tokenService.getToken();     if (token) {       this.getProfile()       .subscribe()     }   }   login(email: string, password: string) {     return this.http.post<Auth>(`${this.apiUrl}/login`, {email, password})     .pipe(       tap(response => this.tokenService.saveToken(response.access_token)),     );   }   getProfile() {     return this.http.get<User>(`${this.apiUrl}/profile`)     .pipe(       tap(user => this.user.next(user))     );   }   loginAndGet(email: string, password: string) {     return this.login(email, password)     .pipe(       switchMap(() => this.getProfile()),     )   }   logout() {     this.tokenService.removeToken();     this.user.next(null);   } }

    auth.service.spec.ts

    import { TestBed } from '@angular/core/testing'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { AuthService } from './auth.service'; import { TokenService } from './token.service'; import { Auth } from '../models/auth.model'; import { environment } from '../../environments/environment'; fdescribe('AuthService', () => {   let authService: AuthService;   let httpController: HttpTestingController;   let tokenService: TokenService;   beforeEach(() => {     TestBed.configureTestingModule({       imports: [         HttpClientTestingModule       ],       providers: [         AuthService,         TokenService       ]     });     authService = TestBed.inject(AuthService);     httpController = TestBed.inject(HttpTestingController);     tokenService = TestBed.inject(TokenService);   });   afterEach(() => {     httpController.verify();   });   it('should be create', () => {     expect(authService).toBeTruthy();   });   describe('test for login', () => {     it('should return a token', (doneFn) => {       //Arrange       const mockData: Auth = {         access_token: '121212'       };       const email = 'cesar@gmail.com';       const password = '1212';       //Act       authService.login(email, password).subscribe((data) => {         //Assert         expect(data).toEqual(mockData);         doneFn();       });       //http config       const url = `${environment.API_URL}/api/v1/auth/login`;       const req = httpController.expectOne(url);       req.flush(mockData);     });   });   it('should call to saveToken', (doneFn) => {     //Arrange     const mockData: Auth = {       access_token: '121212'     };     const email = 'cesar@gmail.com';     const password = '1212';     spyOn(tokenService, 'saveToken').and.callThrough();     //Act     authService.login(email, password).subscribe((data) => {       //Assert       expect(data).toEqual(mockData);       expect(tokenService.saveToken).toHaveBeenCalledTimes(1);       expect(tokenService.saveToken).toHaveBeenCalledOnceWith('121212');       doneFn();     });     //http config     const url = `${environment.API_URL}/api/v1/auth/login`;     const req = httpController.expectOne(url);     req.flush(mockData);   }); });
    Eloy Ortiz

    Eloy Ortiz

    student•
    hace 3 años

    Para que no me fallen los tests, he tenido que declarar así la función del "expectOne"

    const request = httpController.expectOne({method: 'POST'});
    Diego Garcia

    Diego Garcia

    student•
    hace 3 años

    Felicito a Nicolas y el equipo de Platzi, este ha sido el curso de pruebas unitarias más completo que he tenido el gusto de tomar hasta el momento. Muchos temas importantes y sobre todo el manejo conceptos muy claro.

    Juan Piero Santisteban Quiroz

    Juan Piero Santisteban Quiroz

    student•
    hace 3 años

    Dado que el saveToken en un void, es necesario agregarle al spy callThrough().

    describe('Tests for login', () => { it('should call to saveToken', (done) => { const mockData: Auth = { access_token: 'token123', }; const email = 'email@gmail.com'; const password = '1234'; spyOn(tokenService, 'saveToken').and.callThrough(); service.login(email, password).subscribe((data) => { expect(data).toEqual(mockData); expect(tokenService.saveToken).toHaveBeenCalledTimes(1); expect(tokenService.saveToken).toHaveBeenCalledOnceWith( mockData.access_token ); done(); }); // * http configuration const url = `${environment.API_URL}/api/v1/auth/login`; const req = httpController.expectOne(url); req.flush(mockData); }); });

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads