Penduplikatan dan Pengganti Ujian dalam Node.js
Pelajari cara mengasingkan kod yang sedang diuji dengan menggantikan kebergantungan sebenar menggunakan penduplikat, stub dan pengintip supaya ujian unit anda kekal pantas dan tentu.
Penduplikatan dan Pengganti Ujian dalam Node.js ialah pelajaran Kem Intensif Pembangunan Backend Node.js percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kem Intensif Pembangunan Backend Node.js, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 4 pelajaran.
Masalah dengan Kebergantungan Sebenar
Ujian unit harus menyemak satu bahagian logik secara berasingan. Namun, kod sebenar memanggil pangkalan data, API, jam dan sistem fail — semuanya lambat, tidak stabil serta sukar diramalkan.
Pengganti ujian menggantikan kebergantungan tersebut dengan palsu yang boleh dikawal.
Jenis Pengganti Ujian
Istilah umum yang akan anda dengar:
- Stub: mengembalikan nilai yang telah ditetapkan
- Spy: merekod cara ia dipanggil
- Mock: gabungan stub dan spy dengan jangkaan terbina dalam
- Fake: pelaksanaan berfungsi yang ringan
Mencipta Fungsi Mock
Dalam Jest, jest.fn() mencipta fungsi mock. Fungsi ini merekod setiap panggilan dan membolehkan anda membuat penegasan terhadapnya kemudian.
const callback = jest.fn();
callback('hello');
expect(callback).toHaveBeenCalledWith('hello');Menentukan Nilai Pulangan
Beritahu mock perkara yang perlu dipulangkan dengan mockReturnValue, atau bagi kod tak segerak, gunakan mockResolvedValue untuk menyelesaikan promise.
const getUser = jest.fn().mockResolvedValue({ id: 1, name: 'Ada' });
const user = await getUser();
expect(user.name).toBe('Ada');Membuat Penegasan terhadap Panggilan
Spy membolehkan anda mengesahkan interaksi:
toHaveBeenCalled()toHaveBeenCalledTimes(n)toHaveBeenCalledWith(args)
const save = jest.fn();
save({ id: 1 });
expect(save).toHaveBeenCalledTimes(1);Melakukan Mock terhadap Modul
Untuk menggantikan keseluruhan modul yang diimport, gunakan jest.mock(). Setiap eksport menjadi mock automatik yang boleh anda konfigurasikan bagi setiap ujian.
jest.mock('./mailer');
const mailer = require('./mailer');
mailer.send.mockResolvedValue(true);Memerhati Kaedah Sedia Ada
Adakalanya anda mahu memerhati kaedah sebenar tanpa menggantikannya. jest.spyOn() membalut kaedah sedia ada supaya anda boleh membuat penegasan dan, secara pilihan, mengubah suai kelakuannya.
const spy = jest.spyOn(console, 'log');
console.log('hi');
expect(spy).toHaveBeenCalledWith('hi');Menetapkan Semula antara Ujian
Mock mengumpulkan keadaan. Tetapkan semula mock antara ujian supaya panggilan daripada satu ujian tidak terbawa ke ujian lain.
mockClear()mengosongkan data panggilanmockReset()turut mengosongkan pelaksanaan
afterEach(() => {
jest.clearAllMocks();
});Melakukan Mock terhadap Masa
Ujian yang bergantung pada masa semasa mudah menjadi tidak stabil. Pemasa palsu Jest membolehkan anda mengawal jam supaya tamat masa dan tarikh dapat ditentukan dengan konsisten.
jest.useFakeTimers();
const fn = jest.fn();
setTimeout(fn, 1000);
jest.advanceTimersByTime(1000);
expect(fn).toHaveBeenCalled();Suntikan Kebergantungan Memudahkan Mock
Kod yang menerima kebergantungannya sebagai argumen jauh lebih mudah diuji berbanding kod yang mengimport kebergantungan tersebut secara langsung. Reka bentuk kod supaya mudah diuji.
function createService(db) {
return { getUser: id => db.find(id) };
}
const fakeDb = { find: jest.fn().mockReturnValue({ id: 1 }) };
const svc = createService(fakeDb);Jangan Berlebihan Menggunakan Mock
Melakukan mock secara berlebihan menghasilkan ujian yang hanya mengesahkan bahawa mock anda dipanggil — bukan bahawa kod itu berfungsi. Lakukan mock pada sempadan luaran seperti pangkalan data dan rangkaian, tetapi uji logik sebenar secara langsung apabila boleh.
Semakan Ringkas
Uji pemahaman anda tentang pengganti ujian.
Imbas Kembali
Anda telah mempelajari cara mengasingkan kod dengan pengganti ujian:
- Cipta mock dengan
jest.fn()dan konfigurasikan nilai pulangan - Gantikan modul dengan
jest.mock() - Perhatikan kaedah sebenar dengan
jest.spyOn() - Tetapkan semula mock antara ujian dan kawal masa dengan pemasa palsu
- Suntik kebergantungan supaya kod mudah diuji dan elakkan penggunaan mock secara berlebihan
Penggunaan mock yang baik memastikan ujian unit pantas, boleh dipercayai dan berfokus.
Pelajari JavaScript dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 22
- Pelajaran
- 92
Soalan Lazim
Adakah pelajaran “Penduplikatan dan Pengganti Ujian dalam Node.js” percuma?
Ya — teks penuh “Penduplikatan dan Pengganti Ujian dalam Node.js” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Kem Intensif Pembangunan Backend Node.js, tingkat taraf kepada CoddyKit PRO. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Penduplikatan dan Pengganti Ujian dalam Node.js”?
Pelajari cara mengasingkan kod yang sedang diuji dengan menggantikan kebergantungan sebenar menggunakan penduplikat, stub dan pengintip supaya ujian unit anda kekal pantas dan tentu. Anda berlatih Kem Intensif Pembangunan Backend Node.js menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Kem Intensif Pembangunan Backend Node.js?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Kem Intensif Pembangunan Backend Node.js di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Penduplikatan dan Pengganti Ujian dalam Node.js” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kem Intensif Pembangunan Backend Node.js ini?
Ya. Setiap pelajaran Kem Intensif Pembangunan Backend Node.js menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Ujian Unit dengan Jest
- Pengujian Integrasi Titik Akhir API
- Teknik Penyahpepijatan Berkesan
- Penduplikatan dan Pengganti Ujian dalam Node.js