Как вы используете разные с mockingoose? - PullRequest
0 голосов
/ 05 октября 2018

Я использую Mockingoose , чтобы высмеивать мои звонки мангусты при выполнении тестов с Jest.Я пробовал это, но я получаю ошибку

mockingoose.Account.toReturn(
    ["593cebebebe11c1b06efff0372","593cebebebe11c1b06efff0373"],
    "distinct"
);

Ошибка:

ObjectParameterError: Parameter "obj" to Document() must be an object, got 593cebebebe11c1b06efff0372

Итак, я пытаюсь передать ему массив объектов документа, но он просто возвращает документы.Как мне заставить его возвращать только массив или строки?

Вот код внутри функции, которую я тестирую:

const accountIDs = await Account.find({
    userID: "test",
    lastLoginAttemptSuccessful: true
}).distinct("_id");

Я открыт для других способов издеваться над своим мангустомзвонки, если кто-то знает о лучшем пути.Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 октября 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);
0 голосов
/ 05 октября 2018

Вы не можете.

Мой плохой.Я посмотрел на реализацию mockingoose и понял, что она как бы «поддерживает» отличный путем реализации макета, но на самом деле он возвращал только данные документы, как и для других операций.

Открыл вытяните запрос на эту проблему и добавили тест, поэтому ваш пример должен быть действующим и работающим.

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