用笑话模拟第 3 方库构造函数
Mock 3rd party library constructor with jest
我正在用 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;
});
当您想知道是否使用正确的参数调用了构造函数时,您可以使用间谍函数"spyOn"
(这里你有 3 个参数,因为 popper.js
)
因此我在我的规范文件中使用它:
import Popper from 'popper.js';
...
jest.spyOn(Popper.prototype, 'spy');
我正在用 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;
});
当您想知道是否使用正确的参数调用了构造函数时,您可以使用间谍函数"spyOn"
(这里你有 3 个参数,因为 popper.js
)
因此我在我的规范文件中使用它:
import Popper from 'popper.js';
...
jest.spyOn(Popper.prototype, 'spy');