首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你如何使用区分与模拟鹅?

你如何使用区分与模拟鹅?
EN

Stack Overflow用户
提问于 2018-10-05 17:17:49
回答 1查看 651关注 0票数 0

在使用Jest运行测试时,我使用莫金鹅来模拟我的猫鼬调用。我试过了,但我犯了个错误

代码语言:javascript
复制
mockingoose.Account.toReturn(
    ["593cebebebe11c1b06efff0372","593cebebebe11c1b06efff0373"],
    "distinct"
);

错误:

代码语言:javascript
复制
ObjectParameterError: Parameter "obj" to Document() must be an object, got 593cebebebe11c1b06efff0372

然后,我尝试向它传递一个文档对象数组,但它只返回文档。如何让它只返回一个或多个字符串?

下面是我正在测试的函数中的代码:

代码语言:javascript
复制
const accountIDs = await Account.find({
    userID: "test",
    lastLoginAttemptSuccessful: true
}).distinct("_id");

如果有人知道更好的方法,我愿意用其他方式来嘲笑我的猫鼬叫声。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 19:36:35

我认为答案是不要使用嘲笑鹅。你一个人就可以轻松地做这件事。

您可以使用jest.spyOn()mockImplementation()来模拟第一个调用,比如find()update()。下面是一个findOneAndUpdate()示例,我们在这里检查以确保传递了正确的对象:

代码语言:javascript
复制
// TESTING:
// await Timeline.findOneAndUpdate(query, obj);
//

const Timeline = require("./models/user.timeline");
...
const TimelineFindOneAndUpdateMock = jest.spyOn(Timeline, "findOneAndUpdate");
const TimelineFindOneAndUpdate = jest.fn((query, obj) => {
    expect(obj.sendDateHasPassed).toBeFalsy();
    expect(moment(obj.sendDate).format()).toBe(moment("2018-11-05T23:00:00.000Z").format());
});
TimelineFindOneAndUpdateMock.mockImplementation(TimelineFindOneAndUpdate);

如果您想要模拟一个链式函数,您可以让它用您想要调用的下一个链式函数返回一个对象。下面是一个如何模拟链式distinct()调用的示例。

代码语言:javascript
复制
// TESTING:
// let accountIDs = await Account.find(query).distinct("_id");
//
// WILL RETURN:
// ["124512341234","124512341234","124512341234"]
//

const Account = require("./models/user.account");
...
const AccountFindMock = jest.spyOn(Account, "find");
const AccountFindDistinctResult = ["124512341234","124512341234","124512341234"];
const AccountFindDistinctResult = jest.fn(() => AccountFindDistinctResult);
const AccountFindResult = {
    distinct: AccountFindDistinct
};
const AccountFind = jest.fn(() => AccountFindResult);
AccountFindMock.mockImplementation(AccountFind);

在测试运行之后,如果您想检查一个函数被调用了多少次,比如调用了多少次distinct(),您可以添加以下内容:

代码语言:javascript
复制
expect(AccountFindDistinct).toHaveBeenCalledTimes(0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52670532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档