Как тестировать обработчик текста в telegraf.js

Не получается протестировать обработчик текста в telegraf.js

Есть слушатель, он установлен в конструкторе класса

this.on(message.message('text'), async (ctx) => this.processText(ctx));

Пытаюсь протестировать при помощи mocha assert + sinon. Соответственно хочу имитировать слушатель текста и вызвать функцию processText в тесте, но слушатель отказывается что либо слушать. Если кто знает, что не так делаю? Есть еще метод bot.handleUpdate() куда можно передать сообщение обработчику, но данный метод по какой-то причине недоступен в моей сцене

runAuthSceneTests() {
    let auth;
      
    beforeEach(() => {
      auth = new AuthScene(this.queries, this.cfg);
    });
      
    describe('Обработчик ON message для класса AuthScene', () => {
      afterEach(() => {
        sinon.restore();
      });

      it('В данном тесте должен вызваться метод processText, после того как пользователь отправит сообщение боту', async () => {  
        const ctx = { message: { text: 'test' } };
        const processTextStub = sinon.stub(auth, 'processText').resolves();
        auth.on(message.message('text'), ctx);
        assert(processTextStub.calledOnce);
      });
    });
    
    after(() => {
      setTimeout(() => {
        process.exit(0);
      }, 1500);
    });
  }

Ответы (1 шт):

Автор решения: agentx

Нужно использовать метод handler, который принимает параметром экземпляр класса контекст

it('1) В данном тесте должен вызваться метод processText, после того как пользователь отправит сообщение боту', async () => {
        const processTextStub = sinon.stub(auth, 'processText');
        const ctx = new Context({ message: { text: 'test message' } });
        await auth.handler(ctx);
        assert(processTextStub.calledOnce);
      });
→ Ссылка