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');