Apabila bekerja dengan pemalar dalam projek anda, kadangkala perlu menukar nilainya untuk menguji senario yang berbeza. Walau bagaimanapun, pemalar yang diimport secara langsung tidak boleh ditimpa dengan mudah, yang boleh menyukarkan penciptaan ujian. Dalam artikel ini, kita akan melihat cara menggunakan Jest untuk mengejek pemalar secara dinamik, memastikan ujian terpencil dan boleh dipercayai.
Mari kita cipta contoh rekaan yang dipanggil adjustImageQuality, di mana kita melaraskan kualiti imej bergantung pada sama ada kita berada dalam persekitaran pengeluaran.
Kami mentakrifkan pemalar yang dipanggil IS_PRODUCTION yang menunjukkan sama ada kami berada dalam persekitaran pengeluaran:
// constants.js export const IS_PRODUCTION = false;
Kini, kami mencipta fungsi adjustImageQuality. Ia mengubah kualiti imej hanya jika sistem sedang dalam pengeluaran:
// adjustImageQuality.js import { IS_PRODUCTION } from "./constants"; export default function adjustImageQuality(img) { if (IS_PRODUCTION) { img.quality = 100; // Qualidade máxima em produção } else { img.quality = 50; // Qualidade reduzida em desenvolvimento } return img; }
Kami ingin menguji gelagat adjustImageQuality untuk kedua-dua senario: pengeluaran (IS_PRODUCTION = benar) dan pembangunan (IS_PRODUCTION = palsu).
Kami menggunakan Jest untuk mengejek nilai IS_PRODUCTION secara dinamik. Rahsianya ialah menggunakan jest.mock dan mengatasi pemalar dengan getter tersuai.
// adjustImageQuality.test.js import adjustImageQuality from "./adjustImageQuality"; // Mock para a constante IS_PRODUCTION const mockIsProduction = jest.fn(); jest.mock("./constants", () => { const constants = jest.requireActual("./constants"); return { ...constants, get IS_PRODUCTION() { return mockIsProduction(); }, }; }); beforeEach(() => { mockIsProduction.mockClear(); // Limpa os mocks antes de cada teste }); test("sets image quality to 100 in production", () => { // Configura o mock para retornar true (produção) mockIsProduction.mockReturnValue(true); const img = { quality: 0 }; const result = adjustImageQuality(img); expect(result.quality).toEqual(100); }); test("sets image quality to 50 in development", () => { // Configura o mock para retornar false (desenvolvimento) mockIsProduction.mockReturnValue(false); const img = { quality: 0 }; const result = adjustImageQuality(img); expect(result.quality).toEqual(50); });
Kami menggunakan jest.mock untuk memintas modul pemalar. Di dalamnya, kami menggunakan jest.requireActual untuk mendapatkan eksport sebenar dan menambah pengambil untuk IS_PRODUCTION yang berterusan.
jest.mock("./constants", () => { const constants = jest.requireActual("./constants"); return { ...constants, get IS_PRODUCTION() { return mockIsProduction(); }, }; });
Dalam setiap ujian, kami menggunakan mockReturnValue untuk mensimulasikan nilai berbeza untuk IS_PRODUCTION:
Sebelum setiap ujian, kami mengosongkan keadaan olok-olok untuk memastikan ia tidak mengganggu ujian lain:
beforeEach(() => { mockIsProduction.mockClear(); });
Corak olok-olok untuk pemalar ini membolehkan anda mengawal nilai secara dinamik yang digunakan dalam logik aplikasi anda, memastikan ujian terpencil dan boleh dipercayai. Ia amat berguna apabila anda perlu menguji gelagat berdasarkan pembolehubah global, konfigurasi atau keadaan sistem.
Dengan pendekatan ini, anda boleh merangkumi senario yang kompleks tanpa menjejaskan struktur kod anda atau menambah kebergantungan luaran yang tidak perlu.
Atas ialah kandungan terperinci Malar Mengejek dalam Ujian dengan Jest: Contoh Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!