Mock 3rd party library constructor with jest

拟墨画扇 提交于 2019-12-13 12:29:08

问题


I'm writing unit tests with jest and I have to test a function that is calling a constructor from a 3rd party library (the goal of the test is to check that the call is made with good arguments

The 3rd patry library is Popper.js

I have made a jest.spyOn(Popper.prototype, 'constructor').mockImplementation( () => {}) but it is throwing error that came from the inside of the constructor (thus it is not the mock function that has been called)

Here is the code of my test

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

  }); 

回答1:


I finally managed to do something about it. I have created a mock module manually (because jest.genmockfromModule does not seem to work)

jest.mock ('popper.js', () =>
{
  class Popper {
    constructor(a,b,c){
      this.spy(a,b,c);
    }
    spy(a,b,c) {}
    destroy() {}
  }
  return Popper;
});

The spy function is the one that you can "spyOn" when you want to know if the constructor has been called with the good parameters

(here you have 3 arguments because of popper.js)

Thus I use it like so in my spec file :

import Popper from 'popper.js';
 ...
jest.spyOn(Popper.prototype, 'spy');


来源:https://stackoverflow.com/questions/47393901/mock-3rd-party-library-constructor-with-jest

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!