Как вы издеваетесь над функциями Mongoose в Jest? - PullRequest
0 голосов
/ 06 октября 2018

Как вы можете издеваться над мангустовыми звонками, такими как find(), distinct(), count(), populate() и т. Д.?базовые вызовы, такие как find(), и хотя он говорит, что работает с distinct(), он требует, чтобы вы вернули документ и не позволил вам вернуть массив.

1 Ответ

0 голосов
/ 06 октября 2018

Вы можете использовать jest.spyOn(), а затем mockImplementation(), чтобы высмеивать первый звонок, например find() и update().Вот пример findOneAndUpdate(), где мы проверяем, чтобы убедиться, что правильный объект передан:

// 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().

// 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()Вы можете добавить это:

expect(AccountFindDistinct).toHaveBeenCalledTimes(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...