javascript - Simularea constructorului unei biblioteci terțe cu jest
Scriu teste unitare cu Jest și trebuie să testez o funcție care apelează un constructor dintr-o bibliotecă terță (scopul testului este să verific dacă apelul se face cu argumentele corecte)
A treia bibliotecă terță parte este Popper.js
Am făcut un jest.spyOn(Popper.prototype, 'constructor').mockImplementation(() => {}), dar aruncă o eroare care provine din interiorul constructorului (deci nu funcția mock a fost apelată)
Iată codul testului meu
import Popper from 'popper.js';
it('should call Popper constructor with correct argument', () => {
// Arrange
jest.mockImplementation(Popper.prototype, 'constructor', () => {});
const refElem = document.createElement('div');
const popElem = document.createElement('div');
const placement = 'top';
const container = document.createElement('div');
// Act
popup.create(refElem, popElem, placement, container);
// Assert
expect(Popper.prototype.constructor).toHaveBeenCalled();
});
Răspuns #1
Am reușit în sfârșit să fac ceva în privința asta. Am creat un modul mock manual (pentru că jest.genmockfromModule nu pare să funcționeze)
jest.mock ('popper.js', () =>
{
class Popper {
constructor(a,b,c){
this.spy(a,b,c);
}
spy(a,b,c) {}
destroy() {}
}
return Popper;
});
Funcția de spion este cea pe care poți să o „spionezi” atunci când vrei să știi dacă constructorul a fost apelat cu parametrii corecți
(aici aveți 3 argumente din cauza popper.js)
Astfel îl folosesc astfel în fișierul meu de specificații:
import Popper from 'popper.js';
...
jest.spyOn(Popper.prototype, 'spy');
