TypeScript Academy · Oppitunti

Testien tyypitys ja mockit; expectTypeOf

Käyttäkää expectTypeOf-funktiota staattisiin tarkistuksiin ja tyyppiturvallisia mockeja Vitestissä tai Jestissä hauraiden testien ehkäisemiseksi.

Oppitunti 2/38 vaihetta

Testien tyypitys ja mockit; expectTypeOf on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 3 oppituntia.

Johdanto

Tavoite: Varmistakaa tyypit expectTypeOf-toiminnolla ja kirjoittakaa tyyppiturvallisia mockeja, jotta uudelleenjärjestelyt eivät riko testejä huomaamatta.

expectTypeOf:n perusteet

expectTypeOf varmistaa tyypit Vitestin käännösvaiheessa. Se ei aiheuta ajonaikaista kustannusta, mutta havaitsee ristiriidat varhain.

// 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()

Edistyneet väitteet

Hyödyllisiä malleja ovat palautustyyppien selvittäminen rakenteella Awaited<ReturnType<...>> sekä literaali- ja unionivertailut.

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">()

Vitestin mockit

Määrittäkää mockin tyyppi oikein antamalla vi.fn:lle allekirjoitus. Virheelliset argumentit havaitaan käännösvaiheessa.

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
})

Jestin mockit

Pakottakaa Jestissä kutsun allekirjoitus kirjoittamalla jest.fn<Signature>(); täsmentäkää mockin tyyppi MockedFunction-tyypillä.

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 = mul

Vinkit

Erottakaa arvojen tarkistaminen (ajonaikainen) tyyppien tarkistamisesta (käännösaikainen), sillä kyseessä ovat eri tasot.

// 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 zod

Kysymys

Pikatarkistus: Mitä expectTypeOf tarkistaa testiajon aikana?

Kertaus

Kertaus: expectTypeOf — käännösaikainen tyyppitakuu; vi.fn/jest.fn — allekirjoitukseen perustuvat tyyppiturvalliset mockit.

Aloita maksutta

Opi TypeScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
101
Oppitunnit
352

Usein kysytyt kysymykset

Onko oppitunti ”Testien tyypitys ja mockit; expectTypeOf” ilmainen?

Kyllä – oppitunnin ”Testien tyypitys ja mockit; expectTypeOf” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”Testien tyypitys ja mockit; expectTypeOf”?

Käyttäkää expectTypeOf-funktiota staattisiin tarkistuksiin ja tyyppiturvallisia mockeja Vitestissä tai Jestissä hauraiden testien ehkäisemiseksi. Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/3.

Kuinka kauan ”Testien tyypitys ja mockit; expectTypeOf”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?

Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Vitestin/Jestin käyttöönotto TS:lle
  2. Testien tyypitys ja mockit; expectTypeOf
  3. E2E-tyypityksen perusteet (Playwright/Cypress)
← Takaisin: TypeScript Academy