Dalam dunia ujian dengan modul ES6, kebergantungan mengejek kadangkala boleh menimbulkan cabaran. Artikel ini membincangkan cara untuk mengejek import modul ES6 menggunakan Jest, menyediakan penyelesaian yang berfungsi untuk kedua-dua eksport dinamakan dan lalai.
Pertimbangkan modul ES6 hipotetikal berikut yang bergantung pada modul lain untuk kefungsian:
<code class="js">// myModule.js import dependency from './dependency'; export default (x) => { dependency.doSomething(x * 2); };</code>
Dalam senario ujian yang ideal, kami ingin mengejek modul pergantungan dan menegaskan bahawa fungsi doSomething sedang dipanggil dengan hujah yang dijangkakan. Walau bagaimanapun, tugas ini boleh menjadi rumit dengan Jest.
Pendekatan biasa melibatkan menggantikan import dengan memerlukan dan memindahkannya dalam ujian, seperti yang dilihat di sini:
<code class="js">// Dependency Code export const doSomething = (y) => console.log(y); // Module Code (Modified) export default (x) => { const dependency = require('./dependency'); // Yuck dependency.doSomething(x * 2); }; // Test Code (Modified) import myModule from '../myModule'; import dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { jest.mock('../dependency'); myModule(2); const dependency = require('../dependency'); // Also yuck expect(dependency.doSomething).toBeCalledWith(4); }); });</code>
Walaupun pendekatan ini memenuhi keperluan segera, ia memperkenalkan pengubahsuaian yang tidak perlu kepada pangkalan kod dan merendahkan kualiti kod keseluruhan.
Penyelesaian yang lebih elegan melibatkan penggunaan import * sintaks. Teknik ini membenarkan mutasi langsung eksport bernama atau lalai, menjadikan ejekan menjadi mudah.
Untuk Eksport Dinamakan:
<code class="js">// Test Code import myModule from '../myModule'; import * as dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { dependency.doSomething = jest.fn(); // Mutate the named export myModule(2); expect(dependency.doSomething).toBeCalledWith(4); }); });</code>
Untuk Eksport Lalai:
<code class="js">// Test Code import myModule from '../myModule'; import * as dependency from '../dependency'; describe('myModule', () => { it('calls the dependency with double the input', () => { dependency.default = jest.fn(); // Mutate the default export myModule(2); expect(dependency.default).toBeCalledWith(4); // Assert against the default }); }); </code>
Adalah penting untuk ambil perhatian bahawa memutasi modul yang diimport dengan cara sedemikian boleh membawa kepada kesan sampingan dan tingkah laku yang tidak dapat diramalkan dalam ujian. Oleh itu, walaupun pendekatan ini boleh memberikan penyelesaian yang cepat, ia tidak disyorkan sebagai amalan jangka panjang. Jest menyediakan kaedah yang lebih konvensional untuk mengejek dan mengintip modul, yang sepatutnya dipertimbangkan.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Import Modul ES6 Mengejek dengan Jest?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!