Tipizzazione dei test e mock; expectTypeOf
Utilizzi expectTypeOf per i controlli statici e mock type-safe in Vitest/Jest per evitare test fragili.
Tipizzazione dei test e mock; expectTypeOf è una lezione TypeScript Academy gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento TypeScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso TypeScript Academy include 3 lezioni in totale.
Introduzione
Obiettivo: verificare i tipi con expectTypeOf e scrivere mock sicuri rispetto ai tipi, così i refactoring non interrompono i test senza segnalarlo.
Nozioni di base su expectTypeOf
expectTypeOf verifica i tipi in fase di compilazione con Vitest; non ha costi a runtime, ma rileva subito le incompatibilità.
// 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()Asserzioni avanzate
Pattern utili: risolvere i tipi restituiti con Awaited<ReturnType<...>> e confrontare tipi letterali e unioni.
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">()Mock di Vitest
Tipizzare correttamente il mock fornendo una firma a vi.fn; gli argomenti errati verranno rilevati in fase di compilazione.
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
})Mock di Jest
In Jest, imporre la firma della chiamata scrivendo jest.fn<Signature>(); specificare senza ambiguità il 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 = mulSuggerimenti
Separare la convalida dei valori (a runtime) dalla convalida dei tipi (in fase di compilazione): sono livelli diversi.
// 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 zodDomanda
Controllo rapido: che cosa verifica expectTypeOf durante l'esecuzione di un test?
Riepilogo
Riepilogo: expectTypeOf garantisce i tipi in fase di compilazione; vi.fn/jest.fn crea mock sicuri rispetto ai tipi e dotati di una firma.
Impara TypeScript con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 101
- Lezioni
- 352
Domande Frequenti
La lezione «Tipizzazione dei test e mock; expectTypeOf» è gratuita?
Sì — il testo completo di «Tipizzazione dei test e mock; expectTypeOf» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso TypeScript Academy, passa a CoddyKit PRO. Il corso TypeScript Academy include 3 lezioni in totale.
Cosa imparerò in «Tipizzazione dei test e mock; expectTypeOf»?
Utilizzi expectTypeOf per i controlli statici e mock type-safe in Vitest/Jest per evitare test fragili. Eserciti TypeScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare TypeScript Academy?
Non è richiesta alcuna esperienza precedente. TypeScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.
Quanto tempo richiede la lezione «Tipizzazione dei test e mock; expectTypeOf»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione TypeScript Academy?
Sì. Ogni lezione TypeScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Configurazione di Vitest/Jest per TS
- Tipizzazione dei test e mock; expectTypeOf
- Cenni sulla tipizzazione E2E (Playwright/Cypress)