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
