用开玩笑模拟第三方库构造函数

时间:2017-11-20 14:04:47

标签: javascript typescript unit-testing jestjs popper.js

我正在用jest编写单元测试,我必须测试一个从第三方库调用构造函数的函数(测试的目标是检查调用是否带有好的参数

第三个patry库是Popper.js

我已经创建了一个jest.spyOn(Popper.prototype, 'constructor').mockImplementation( () => {}),但它抛出了来自构造函数内部的错误(因此它不是已调用的mock函数)

以下是我的测试代码

  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 个答案:

答案 0 :(得分:0)

我终于设法做了些什么。 我手动创建了一个模拟模块(因为jest.genmockfromModule似乎不起作用)

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

当您想知道是否已使用良好参数调用构造函数时,间谍函数是您可以“窥探”的函数

(这里有3个参数,因为popper.js

因此我在我的spec文件中使用它:

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