Как написать модульный тест для метода, который возвращает анонимную функцию

#node.js #mongoose #jestjs #mongoose-schema

#node.js #мангуст #jestjs #мангуст-схема

Вопрос:

Я пишу модульный тестовый пример (jest) для метода, который возвращает анонимную функцию. для функции мне нужно передать имя объекта, а для анонимной функции он принимает this(ответ мангуста) и next(экспресс) в качестве аргументов. как издеваться или передавать значение этому при вызове метода validate?

Метод

   validatesss(entityName: string) {
    return async function (this: any, next: HookNextFunction) {
      const sequence = await metadataModel.getIncrementedSequence(entityName);
      this.set({ [entityName   '_no']: sequence });
      next();
    };
  }
 

Ответ №1:

this может быть предоставлен функции с call помощью или apply :

 let next = jest.fn();
let set = jest.fn();
let fn = obj.validatesss('foo');
expect(fn).toEqual(expect.any(Function));
await fn.call({ set }, next);
expect(set).toBeCalledWith({ foo_no: ... });
expect(next).toBeCalledWith();