Проблема: Итак, проблема, с которой я столкнулся в последнее время как начинающий юнит-тест, касается классов, которые интенсивно используют базу данных.
Используемые технологии: Typescript, SinonJS, Node-Postgres и Jest
Пример: Для данной функции
public async insertUserDetails() {
const confirmationCode = this.generateConfirmationCode();
try {
await this.db.query({
text: 'INSERT INTO users (firstname, lastname, email, password, registration_date, confirmation_code) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *',
values: [this.firstname, this.lastname, this.email, this.password, this.registrationDate, confirmationCode]
});
} catch (error) {
throw error;
}
}
Вопрос: Был бы подходящий модульный тест, чтобы убедиться, что функция db.query () вызывается с правильным sql, например, следующим?Или это будет считаться пустой тратой времени и тестом хрупким ?
test("should format correct sql", async () => {
//Test Setup
const user = new User({
firstname: "John",
lastname: "doe",
email: "email@example.com",
password: "some_password_hash",
registrationDate: "some_random_date",
});
//Mocks
const queryStub = sinon.stub(user.db, "query");
const confirmationCode = sinon.stub(user,'generateConfirmationCode').returns("48fsakb8a-cfjdab");
const sampleQuery = {
text: 'INSERT INTO users (firstname, lastname, email, password, registration_date, confirmation_code) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *',
values: [user.firstname, user.lastname, user.email, user.password, user.registrationDate, confirmationCode]
}
//Preform
await user.insertUserDetails();
//Assert
sinon.assert.calledWith(queryStub, sampleQuery);
});
Или я должен все вместе пропустить модульные тесты для этих типов функций и классов и настроить базу данных интеграционных тестов и протестировать эти случаи с помощью интеграционных тестов?
Это очень упрощенный пример, поскольку я не занимался тестированием транзакций базы данных, но тестирование транзакций становится еще более опасным, так как выполняется несколько запросов.
Спасибо за любую помощь!Это сводит меня с ума -__-