Rumah > hujung hadapan web > tutorial js > Pembangunan Dipacu Ujian (TDD) dengan Ujian Bun

Pembangunan Dipacu Ujian (TDD) dengan Ujian Bun

Patricia Arquette
Lepaskan: 2024-12-29 17:15:15
asal
952 orang telah melayarinya

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.

Apakah TDD?

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:

  • Tulis ujian untuk kefungsian yang diingini.
  • Tentukan semua senario ujian yang ingin anda bincangkan.
  • Jalankan ujian dan sahkan bahawa ia gagal (kerana fungsi mungkin tidak lengkap atau belum meliputi semua senario lagi).
  • Kemas kini dan faktor semula kod untuk membuat ujian lulus sambil memastikan semua ujian berjaya.

Proses lelaran ini direka untuk menghasilkan kod yang mantap dan teruji dengan baik.

Menyediakan projek JavaScript anda dengan Bun

Jika anda belum memasang Bun, pasangkannya dengan mengikut arahan pada dokumentasi JavaScript Bun.
Kemudian, mulakan projek baharu:

bun init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
➜  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.
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Menulis ujian pertama anda

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:

  • Buat fail calculator.ts di mana kita akan mentakrifkan fungsi sum() yang pada mulanya mengembalikan 0.
  • Tulis ujian untuk fungsi sum(), meliputi beberapa kes ujian.
  • Jalankan ujian dan sahkan bahawa mereka gagal.
  • Kemas kini logik fungsi sum() untuk membuat ujian lulus.
  • Jalankan semula ujian untuk memastikan pelaksanaan kami betul.

Cipta fail calculator.test.js anda

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);
  });
});
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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:

  1. Ujian: Menambah dua nombor positif
    • Penerangan: "harus mengembalikan hasil tambah dua nombor (kedua-duanya positif)"
    • Ujian ini menyemak sama ada fungsi jumlah mengira jumlah dua integer positif dengan betul.
    • Contoh: jumlah(2, 3) dijangka untuk mengembalikan 5.
  2. Ujian: Menambah nombor negatif dan positif
    • Penerangan: "harus mengembalikan hasil tambah dua nombor (satu adalah negatif)"
    • Ujian ini mengesahkan bahawa fungsi jumlah dengan betul mengendalikan senario di mana satu nombor adalah negatif.
    • Contoh: jumlah(-1, 2) dijangka untuk mengembalikan 1.

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

Cipta fail calculator.ts anda

Kini, anda boleh mencipta modul kalkulator anda yang akan mengeksport fungsi sum().
Dalam fail calculator.ts:

bun init
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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.
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Test-Driven Development (TDD) with Bun Test

Kini kita boleh melaraskan logik fungsi sum() dalam kalkulator.ts melaraskan logik fungsi sum():

mkdir tests
touch tests/example.test.js
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kini, jika anda menjalankan ujian, anda akan mendapat status "hijau" ✅.

Test-Driven Development (TDD) with Bun Test

Ujian pemfaktoran semula dengan set data

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);
  });
});
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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;
}
Salin selepas log masuk

Dataset ialah susunan tatasusunan. Setiap tatasusunan dalam mewakili kes ujian, di mana elemen sepadan dengan:

  • a (nombor pertama untuk ditambah),
  • b (nombor kedua untuk ditambah),
  • dijangka (hasil jangkaan jumlah(a, b)).

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.

Mengapa menggunakannya.each() (atau test.each())?

  • Kecekapan: daripada menulis blok memisahkan it() atau test() untuk setiap kes, anda boleh menentukan semua kes ujian dalam set data tunggal dan menggelungkannya.
  • Kebolehbacaan: logik ujian adalah ringkas dan set data memudahkan penambahan atau pengubahsuaian kes ujian tanpa menduplikasi kod.
  • Skalabiliti: berguna apabila menangani berbilang kes ujian, terutamanya apabila logik yang diuji adalah serupa merentas kes.

Satu lagi contoh praktikal: mengira min

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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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.
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Jadi sekarang anda boleh melaksanakan semula ujian

mkdir tests
touch tests/example.test.js
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Test-Driven Development (TDD) with Bun Test

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

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);
  });
});
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Test-Driven Development (TDD) with Bun Test

Mengapa Perlindungan Penting?

  • Mengenal pasti jurang dalam ujian: laporan liputan menyerlahkan bahagian mana kod anda tidak diuji. Ini membantu anda memastikan logik kritikal tidak diabaikan.
  • Meningkatkan kualiti kod: liputan tinggi memastikan kes tepi, pengendalian ralat dan logik perniagaan diuji dengan teliti, mengurangkan kemungkinan pepijat.
  • Keyakinan dalam pemfaktoran semula: jika anda mempunyai pangkalan kod yang diuji dengan baik, anda boleh memfaktorkan semula dengan yakin, kerana mengetahui ujian anda akan mendapat regresi.
  • Penyelenggaraan yang lebih baik: pangkalan kod dengan liputan ujian yang tinggi adalah lebih mudah untuk diselenggara, kerana anda boleh mengesan perubahan yang tidak diingini atau kesan sampingan semasa kemas kini.
  • Menyokong TDD: untuk pembangun yang mengamalkan Pembangunan Dipacu Ujian, liputan pemantauan memastikan ujian sejajar dengan pelaksanaan.

Mengimbangi matlamat liputan

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.

Kesimpulan

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan