Bagaimana Mengendalikan Import Modul ES6 Mengejek dengan Jest?

Barbara Streisand
Lepaskan: 2024-10-23 22:34:02
asal
338 orang telah melayarinya

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

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

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

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

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!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!