javascript - 用 Jest 模拟第 3 方库构造函数

标签 javascript typescript unit-testing jestjs popper.js

我正在用 jest 编写单元测试,我必须测试一个从 3rd 方库调用构造函数的函数(测试的目标是检查调用是否使用正确的参数

第三个 patry 库是 Popper.js

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

这是我的测试代码

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

  }); 

最佳答案

我终于设法解决了这个问题。 我已经手动创建了一个模拟模块(因为 jest.genmockfromModule 似乎不起作用)

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

spy 函数是当您想知道是否已使用正确参数调用构造函数时可以“监视”的函数

(由于 popper.js,这里有 3 个参数)

因此我在我的规范文件中像这样使用它:

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

关于javascript - 用 Jest 模拟第 3 方库构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393901/

相关文章:

java - Jmockit 模拟问题

javascript - 在 Express 中将 Node env 传递给 layout.jade 而无需显式定义路由

javascript - 如何知道页面上是否加载了所有内容?

mysql - 如何使用 onDelete : 'CASCADE' on one-to-one relationship

asp.net - The source map 'data:application/json;base64,' ;' for file ' domain/systemjs/dist/system.src.js' 由于错误无法正确加载

unit-testing - 测试阶段在 XCode 4 中呈灰色显示

javascript - 无论水平滚动如何,始终保持图像居中

javascript - 拖动应用phonegap

typescript - 在 package.json 中指定多个类型定义文件

从一组单元测试中组成一个组合测试套件程序