node.js - Simulează un namespace și o funcție cu același nume folosind Jest


O bibliotecă pe care o folosesc este structurată astfel

declare namespace foo {
  function bar();
};

declare namespace foo.bar {
  function baz();
};

Deci cele două funcții pe care trebuie să le simulăm sunt foo.bar() și foo.bar.baz().

Pentru a face mock la foo.bar() foloseam anterior

require('foo');

jest.mock('foo', () => ({
  bar: () => mockedBar,
}));

Există vreo modalitate de a imita foo.bar.baz()? Am încercat

jest.mock('foo.bar', () => ({
}));

Dar afișează un mesaj Cannot find module 'foo.bar' from 'functions.test.js'.

Răspuns #1

Poți defini un mock personalizat pentru modulul tău într-un folder __mocks__ în rădăcina proiectului tău (definit în configurația jest!). Astfel, poți crea __mocks__/foo.js cu funcțiile modulului foo mock-uite și Jest încarcă automat acest modul în scopuri de testare. De asemenea, poți specifica un path personalizat pentru mock-ul tău:

jest.mock('foo', () => jest.requireActual('../some/another/folder/foo.js'));

Verifică un manual Jest pentru mai multe informații

Răspunsul #2

Dacă 'foo' este sub global, puteți încerca să adăugați codurile de mai jos la începutul scriptului de test. Sau să le scrieți într-un fișier .js și să le importați în prima linie.

Object.defineProperty(global, "foo", {
    value: {
        bar: {
            baz: ()=>{
                 return true;
               },
            },
        },
    },
});

Sau pur și simplu

global["foo"] = {
    bar: {
        baz: () => {
            return true;
        },
    },
};

a-l batjocori pe cineva