Как тестировать обработчик текста в 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);
});