Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana Mengendalikan Import Modul ES6 Mengejek dengan Jest?

Bagaimana Mengendalikan Import Modul ES6 Mengejek dengan Jest?

Barbara Streisand
Barbara Streisandasal
2024-10-23 22:34:02341semak imbas

How to Handle ES6 Module Imports Mocking with Jest?

Mengejek Import Modul ES6 dengan Jest

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.

Masalahnya

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 'Yuck'

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.

Pendekatan 'Hack'

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>

Awas

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!

Kenyataan:
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