#node.js #aws-lambda #jestjs #supertest
Вопрос:
Я пытаюсь обработать случай использования исключений с помощью супертеста и шутки для данного кода. Я перепробовал много вещей, но не смог найти решение.
var serverless = require('serverless-http');
import express from 'express';
const app = express();
app.use(express.json());
app.post('/post', async (req, res) => {
try {
// Get user from dynamodb
const id = 'random-user-id';
const user = await DynamoDb.Scan({
TableName: 'user_table',
FilterExpression: 'id = :id',
ExpressionAttributeValues: {
':id': id,
},
}).catch(async (err) => {
throw err;
});
console.log('user', user);
return res.status(200).send();
} catch (exception) {
// Trying to handle this
throw exception;
}
});
module.exports.handler = serverless(app);
Тестовый случай
test("should throw error on failing to get user from database", async () => {
mockScan.mockImplementation(() => {
return {
promise() {
return Promise.reject({});
},
};
});
const response = await request
.post(`/post`)
.send();
});
При запуске теста он застревает и приводит к
Шутка не завершилась через секунду после завершения тестового запуска. Обычно это означает, что существуют асинхронные операции, которые не были остановлены в ваших тестах. Подумайте о том, чтобы запустить Jest с
--detectOpenHandles
для устранения этой проблемы.
Комментарии:
1. Вы не можете справиться с этим, это фундаментальная проблема в коде вашего сервера — есть необработанное отклонение обещания, которое не приводит ни к какому ответу, запрос просто зависает. См., например expressjs.com/en/advanced/… для исправлений.