Testien tyypitys ja mockit; expectTypeOf
Käyttäkää expectTypeOf-funktiota staattisiin tarkistuksiin ja tyyppiturvallisia mockeja Vitestissä tai Jestissä hauraiden testien ehkäisemiseksi.
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 = mulVinkit
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 zodKysymys
Pikatarkistus: Mitä expectTypeOf tarkistaa testiajon aikana?
Kertaus
Kertaus: expectTypeOf — käännösaikainen tyyppitakuu; vi.fn/jest.fn — allekirjoitukseen perustuvat tyyppiturvalliset mockit.
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
- Vitestin/Jestin käyttöönotto TS:lle
- Testien tyypitys ja mockit; expectTypeOf
- E2E-tyypityksen perusteet (Playwright/Cypress)