Pembangunan Dipacu Ujian (TDD) ialah metodologi yang berkuasa untuk menulis kod yang bersih dan bebas pepijat. Dalam artikel ini, kami akan meneroka cara melaksanakan TDD menggunakan pelari ujian terbina dalam Bun, Bun Test, yang terkenal dengan kelajuan dan kesederhanaannya.
Pembangunan dipacu ujian (TDD) ialah amalan pembangunan perisian di mana ujian ditulis sebelum kod. Amalan TDD membimbing pelaksanaan dan memastikan kefungsian melalui penulisan berulang, ujian dan kitaran pemfaktoran semula.
TDD ialah proses pembangunan yang mengikut langkah berikut:
Proses lelaran ini direka untuk menghasilkan kod yang mantap dan teruji dengan baik.
Jika anda belum memasang Bun, pasangkannya dengan mengikut arahan pada dokumentasi JavaScript Bun.
Kemudian, mulakan projek baharu:
bun init
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
Buat fail ujian dalam direktori ujian (cth., tests/example.test.js). Bun secara automatik mengesan fail yang berakhir dengan .test.ts atau .test.js untuk ujian.
mkdir tests touch tests/example.test.js
Mari kita mulakan dengan contoh mudah.
Kami akan membuat fail kalkulator untuk melaksanakan beberapa fungsi matematik.
Mula-mula kami akan memfokuskan pada fungsi mudah, seperti sum(), walaupun JavaScript sudah mempunyai operator penambahan asli. Ini membolehkan kami menumpukan perhatian pada penstrukturan ujian dan bukannya kerumitan logik.
Inilah rancangannya:
Dalam fail tests/calculator.test.js, anda boleh melaksanakan ujian anda:
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
Ujian ini mengesahkan kelakuan fungsi sum(), yang ditakrifkan dalam modul kalkulator. Ujian ditulis menggunakan perpustakaan ujian Bun dan disusun dalam blok huraikan bernama "fungsi jumlah". Blok describe() membantu mengumpulkan ujian "serupa". Setiap blok it() menentukan senario tertentu untuk diuji. Inilah yang dilakukan oleh setiap ujian:
Ujian ini memastikan bahawa fungsi jumlah berfungsi seperti yang diharapkan untuk senario penambahan asas, meliputi kedua-dua nombor positif dan input bercampur (positif dan negatif).
Kini, anda boleh mencipta modul kalkulator anda yang akan mengeksport fungsi sum().
Dalam fail calculator.ts:
bun init
Versi pertama fungsi mengembalikan nilai berkod keras, jadi saya menjangkakan ujian akan gagal.
Menjalankan ujian:
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
Kini kita boleh melaraskan logik fungsi sum() dalam kalkulator.ts melaraskan logik fungsi sum():
mkdir tests touch tests/example.test.js
Kini, jika anda menjalankan ujian, anda akan mendapat status "hijau" ✅.
Jika anda ingin menjalankan ujian yang sama dengan senario yang berbeza (nilai input), anda boleh menggunakan kaedah each().
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
Menggunakan pendekatan terdorong set data, kod ini menguji fungsi jumlah daripada modul kalkulator. Kaedah it.each() digunakan untuk memudahkan kes ujian berulang dengan mengulangi set data input dan output yang dijangkakan. Berikut ialah pecahan cara ia berfungsi:
Pertama, anda boleh menentukan set data
export function sum(a: number, b: number) { // Function yet to be implemented return 0; }
Dataset ialah susunan tatasusunan. Setiap tatasusunan dalam mewakili kes ujian, di mana elemen sepadan dengan:
Fungsi huraikan kumpulan semua ujian yang berkaitan dengan fungsi jumlah di bawah satu blok untuk organisasi yang lebih baik.
Dalam blok describe(), it.each(dataset) berulang pada setiap baris dalam tatasusunan set data.
"Jumlah %d dan %d hendaklah %d" ialah templat perihalan untuk ujian, dengan %d digantikan dengan nombor sebenar daripada set data semasa setiap lelaran.
Contohnya, lelaran pertama menjana perihalan: "Jumlah 2 dan 3 hendaklah 5".
Dalam fungsi panggil balik (a, b, dijangka), elemen setiap baris dalam set data dimusnahkan kepada pembolehubah: a, b dan dijangka. Kemudian, di dalam ujian, fungsi jumlah dipanggil dengan a dan b, dan hasilnya disemak menggunakan expect() untuk memastikan ia sepadan dengan yang dijangkakan.
Untuk menunjukkan contoh tambahan untuk TDD, mari kita laksanakan fungsi min dalam modul kalkulator yang mengira min (purata) tatasusunan nombor. Mengikuti pendekatan TDD, kami akan mulakan dengan menulis ujian.
Dalam calculator.test.js yang sedia ada, tambahkan ujian ini khusus untuk fungsi min():
bun init
Sekarang dalam fail calculator.ts, tambahkan fungsi min():
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
Jadi sekarang anda boleh melaksanakan semula ujian
mkdir tests touch tests/example.test.js
Semua ujian mesti lulus.
Dalam kes ini, pelaksanaan sudah diuji, jadi tiada pemfaktoran semula diperlukan. Walau bagaimanapun, sentiasa luangkan masa untuk menyemak kod anda untuk penambahbaikan.
Liputan ujian ialah metrik yang mengukur peratusan pangkalan kod anda yang dilaksanakan semasa ujian automatik. Ia memberikan cerapan tentang sejauh mana ujian anda mengesahkan kod anda.
Liputan ujian Bun membantu mengenal pasti "liputan talian".
Liputan talian menyemak sama ada setiap baris kod dilaksanakan semasa suite ujian.
Menjalankan liputan ujian:
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
Walaupun liputan ujian yang tinggi adalah penting, ia bukan satu-satunya ukuran kualiti kod. Matlamat untuk ujian bermakna yang memfokuskan pada kefungsian, kes tepi dan bahagian kritikal aplikasi anda. Mencapai liputan 100% adalah ideal, tetapi tidak dengan kos menulis ujian yang tidak perlu atau remeh.
Pembangunan Dipacu Ujian (TDD) dengan Bun Test memperkasakan pembangun untuk menulis kod yang bersih, boleh diselenggara dan teguh dengan memfokuskan pada keperluan terlebih dahulu dan memastikan kefungsian melalui ujian berulang. Dengan memanfaatkan alatan ujian Bun yang pantas dan cekap, anda boleh menyelaraskan proses pembangunan anda dan mengendalikan kes tepi dengan yakin. Mengguna pakai TDD bukan sahaja meningkatkan kualiti kod tetapi juga memupuk pemikiran menulis kod modular yang boleh diuji dari awal. Mulakan secara kecil-kecilan, kerap berulang dan biarkan ujian anda membimbing pelaksanaan anda.
Atas ialah kandungan terperinci Pembangunan Dipacu Ujian (TDD) dengan Ujian Bun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!