0Pricing
TypeScript Academy · Pelajaran

Mengetik pengujian & mock; expectTypeOf

Gunakan expectTypeOf untuk pemeriksaan statis dan mock bertipe aman di Vitest/Jest guna mencegah pengujian yang rapuh.

Mengetik pengujian & mock; expectTypeOf adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 3 pelajaran total.

Pendahuluan

Tujuan: Nyatakan tipe dengan expectTypeOf dan tulis tiruan yang aman terhadap tipe agar perubahan struktur tidak diam-diam merusak pengujian.

Dasar-dasar expectTypeOf

expectTypeOf menyatakan tipe saat kompilasi dalam Vitest; tidak ada biaya saat program berjalan, tetapi ketidaksesuaian dapat ditemukan lebih awal.

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

Pernyataan lanjutan

Pola yang berguna: memperoleh tipe pengembalian dengan Awaited<ReturnType<...>>, serta membandingkan literal dan gabungan.

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

Tiruan Vitest

Tentukan tipe tiruan dengan benar dengan menyediakan tanda tangan untuk vi.fn; argumen yang salah akan ditemukan saat kompilasi.

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

Tiruan Jest

Dalam Jest, tegakkan tanda tangan pemanggilan dengan menulis jest.fn<Signature>(); bedakan tipe tiruan dengan 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 = mul

Kiat

Pisahkan validasi nilai (saat program berjalan) dari validasi tipe (saat kompilasi); keduanya merupakan lapisan yang berbeda.

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

Pertanyaan

Pemeriksaan singkat: Apa yang diperiksa expectTypeOf selama pengujian dijalankan?

Ringkasan

Ringkasan: expectTypeOf — jaminan tipe saat kompilasi; vi.fn/jest.fn — tiruan aman terhadap tipe dengan tanda tangan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengetik pengujian & mock; expectTypeOf” gratis?

Ya — teks lengkap “Mengetik pengujian & mock; expectTypeOf” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Mengetik pengujian & mock; expectTypeOf”?

Gunakan expectTypeOf untuk pemeriksaan statis dan mock bertipe aman di Vitest/Jest guna mencegah pengujian yang rapuh. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai TypeScript Academy?

Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 3.

Berapa lama pelajaran “Mengetik pengujian & mock; expectTypeOf” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?

Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penyiapan Vitest/Jest untuk TS
  2. Mengetik pengujian & mock; expectTypeOf
  3. Sekilas pengetikan E2E (Playwright/Cypress)
← Kembali ke TypeScript Academy