首页 > 解决方案 > NodeJs 和 Jest:模拟 Mongoose 多次调用 find().sort().limit()

问题描述

想知道如何开玩笑地模拟多个链式猫鼬调用。例如我有一个简单的方法:

exports.Limit5Videos = async() => {
try{
    const mostClicked = await Videos.find().sort({ clicks: -1 }).limit(5);
    return mostClicked;
}catch(err){
    return err;
}
};

此方法返回“网站上”点击次数最多的 5 个视频。我正在尝试对这种方法进行单元测试,但是当我这样做时,我不断得到以下信息:

TypeError: Videos.find(...).sort(...).limit 在我运行测试时不是一个函数。

这是我的测试:

var video1 = new Video();
video1.clicks = 1;
var video2 = new Video();
video2.clicks = 2;
var video3 = new Video();
video3.clicks = 3;
var video4 = new Video();
video4.clicks = 4;
var video5 = new Video();
video5.clicks = 5;
var video6 = new Video();
video6.clicks = 6;

var listOfVideos = [video1, video2, video3, video4, video5, video6];
var expected = [video6, video5, video4, video3, video2];
var mockedValue = listOfVideos.filter(v => v.clicks > 1).sort(function compare(a, b) {
    return b.clicks - a.clicks;
  });
  
  
Video.find = jest.fn().mockImplementation(() => ({ sort: 
jest.fn().mockResolvedValue(mockedValue)})); 
await expect(videoHelper.GetMostClickedLimit5()).resolves.toBe(expected);

我怎样才能为这种方法编写一个开玩笑的单元测试?对不起,如果这是基本的,但对开玩笑来说是新的,并且在多个链接调用中找不到任何东西。我可以使用“排序”运行测试,但不知道如何添加“限制”。

标签: node.jsunit-testingmongoosejestjsmocking

解决方案


推荐阅读