我如何嘲笑链式功能?

时间:2019-07-08 07:47:57

标签: node.js unit-testing mongoose jestjs

我用玩笑来测试我的node.js代码。我需要使用猫鼬连接到mongodb。但是我不知道如何模拟链接的函数。

我需要模拟的功能(船只是一个模块):

return await Vessels.find({}).exec();

我尝试模仿的方式,但是失败了:

 Vessels.find.exec = jest.fn(() => [mockVesselResponse]);

我想模拟链接函数Vessels.find({}).exec(),在这里的任何人都可以帮助我,谢谢。

1 个答案:

答案 0 :(得分:1)

朴素的方法是模拟方法find,该方法将使用方法exec返回对象(有关详细信息,请查看ways to mock modules上的Jest docs):

import Vessels from '/path/to/vessels';

jest.mock('/path/to/vessels'); 
Vessels.prototype.find.mockReturnThis();
Vessels.prototype.exclude.mockReturnThis();
Vessels.prototype.anyOtherChainingCallMethod.mockReturnThis();

it('your test', () => {
   Vessels.prototype.exec.mockResolvedValueOnce([youdata]);
   // your code here
});

但是在我看来,要完成很多模拟每个内部方法的大量手动工作。

相反,我建议您更深一层地嘲笑。用mockingoose模拟mongoose模型。

从未与mongoose合作,因此无法提供此方法的示例。