Tipado de pruebas y mocks; expectTypeOf
Utilice expectTypeOf para comprobaciones estáticas y mocks con tipos seguros en Vitest/Jest para evitar pruebas frágiles.
Tipado de pruebas y mocks; expectTypeOf es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 3 lecciones en total.
Introducción
Objetivo: Compruebe tipos con expectTypeOf y escriba mocks con seguridad de tipos para que las refactorizaciones no rompan las pruebas silenciosamente.
Conceptos básicos de expectTypeOf
expectTypeOf comprueba los tipos en tiempo de compilación en Vitest; no tiene coste en tiempo de ejecución, pero detecta pronto las incompatibilidades.
// Vitest provides expectTypeOf
import { expectTypeOf } from "vitest";
function fullName(first: string, last: string) {
return `${first} ${last}`
}
// static checks (compile-time)
expectTypeOf(fullName).toBeFunction()
expectTypeOf(fullName("Ada","Lovelace")).toBeString()Aserciones avanzadas
Patrones útiles: resolver tipos de retorno con Awaited<ReturnType<...>> y comparar literales y uniones.
import { expectTypeOf } from "vitest";
interface User { id: number; name: string }
function getUser(): Promise<User> { return Promise.resolve({ id:1, name:"A" }) }
// unwrap Promise
type Resolved = Awaited<ReturnType<typeof getUser>>
expectTypeOf<Resolved>().toMatchTypeOf<User>()
// literal + union
const status = "ok" as const
expectTypeOf(status).toEqualTypeOf<"ok">()Mocks de Vitest
Especifique correctamente el tipo del mock proporcionando una firma a vi.fn; los argumentos incorrectos se detectarán durante la compilación.
import { vi, describe, it, expect } from "vitest";
function fetchUser(id: number): Promise<string> {
return Promise.resolve(`user-${id}`)
}
// typed mock
const mockFetch: ReturnType<typeof vi.fn<[(id: number), Promise<string>]>> = vi.fn(async (id: number) => `user-${id}`)
it("uses typed mock", async () => {
const name = await mockFetch(5)
expect(name).toBe("user-5")
// mockFetch("x") // TS error: id must be number
})Mocks de Jest
En Jest, fuerce la firma de llamada escribiendo jest.fn<Signature>(); desambigüe el tipo del mock con MockedFunction.
import { jest } from "@jest/globals";
function times(a: number, b: number) { return a * b }
const mul = jest.fn<(a:number,b:number)=>number>((a,b)=>a*b)
mul(2,3) // ok
// mul("2",3) // TS error
// MockedFunction utility
type MulMock = jest.MockedFunction<typeof mul>
const _check: MulMock = mulConsejos
Separe la validación de valores (en tiempo de ejecución) de la validación de tipos (en tiempo de compilación); son capas diferentes.
// value assertions
import { expect } from "vitest";
expect(2 + 3).toBe(5)
// type assertions (compile-time)
import { expectTypeOf } from "vitest";
expectTypeOf(2 + 3).toBeNumber()
// don't confuse with runtime validators like zodPregunta
Comprobación rápida: ¿Qué comprueba expectTypeOf durante la ejecución de una prueba?
Repaso
Repaso: expectTypeOf garantiza los tipos en tiempo de compilación; vi.fn/jest.fn crean mocks con seguridad de tipos mediante una firma.
Preguntas frecuentes
¿La lección «Tipado de pruebas y mocks; expectTypeOf» es gratis?
Sí — el texto completo de «Tipado de pruebas y mocks; expectTypeOf» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Tipado de pruebas y mocks; expectTypeOf»?
Utilice expectTypeOf para comprobaciones estáticas y mocks con tipos seguros en Vitest/Jest para evitar pruebas frágiles. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar TypeScript Academy?
No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.
¿Cuánto tiempo toma la lección «Tipado de pruebas y mocks; expectTypeOf»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?
Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Configuración de Vitest/Jest para TS
- Tipado de pruebas y mocks; expectTypeOf
- Introducción al tipado E2E (Playwright/Cypress)