Как мне макет цепной функции в шутку? - PullRequest
1 голос
/ 08 июля 2019

Я использую jest для проверки своего кода node.js.Мне нужно подключиться к mongodb с помощью mongoose.Но я не знаю, как смоделировать прикованную функцию.

функция, которую мне нужно смоделировать (Vessels - это модуль):

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

так, как я пытался смоделировать, но этотерпит неудачу:

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

Я хочу смоделировать цепную функцию Vessels.find({}).exec(), кто-нибудь здесь может мне помочь, спасибо.

1 Ответ

1 голос
/ 08 июля 2019

Наивный способ - смоделировать метод find, который бы возвращал объект с методом exec (подробнее см. Документацию Jest по способам смоделировать модули ):

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
});

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

Вместо этого я предлагаю вам издеваться на один уровень глубже. Скажем, с насмешкой mongoose модели с mockingoose.

Никогда не работал с mongoose, поэтому не могу предоставить пример для этого подхода.

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