У меня есть вопрос о написании модульного теста Mocha в моем приложении Node, когда функция явно ничего не возвращает.
В частности, я хочу написать тест для итераций по двум массивам - один для вставок и один для обновлений. Эта функция выглядит следующим образом:
module.exports = async function dataSetsMergeOp(args) {
const recordsToInsert = args.newRecords;
const recordsToUpdate = args.matchingRecords;
// Handle inserts
if (recordsToInsert.length > 0) {
for (let record of recordsToInsert) {
try {
const insertQuery = `
INSERT INTO cd.customer_accounts (
hypindx,
hypnumbr_1,
hypnumbr_2,
) VALUES (?, ?, ?);
`;
const args = [
record.HYPINDX,
trimmedStringOrNull(record.HYPNUMBR_1),
trimmedStringOrNull(record.HYPNUMBR_2),
];
console.log('Record inserting...');
await queryHandler(insertQuery, args);
} catch (error) {
console.log(error);
}
}
}
// Handle updates
if (recordsToUpdate.length > 0) {
for (let record of recordsToUpdate) {
try {
const updateQuery = `
UPDATE cd.customer_accounts
SET
hypindx = ?,
hypnumbr_1 = ?,
hypnumbr_2 = ?
WHERE hypindx = ?
`;
const args = [
record.ACTINDX,
trimmedStringOrNull(record.HYPNUMBR_1),
trimmedStringOrNull(record.HYPNUMBR_2),
record.HYPINDX
];
console.log('Record updating...');
await queryHandler(updateQuery, args);
} catch (error) {
console.log(error);
}
}
}
};
Теперь соответствующая часть моего теста мокко будет выглядеть примерно так:
before(async function () {
try {
result = await dataSetsMergeOp(args);
} catch (e) {
console.log(e.stack);
}
});
it("should be truthy", function () {
assert.isOk(result);
});
it("should return an object for the 'job'", function () {
assert.isObject(result);
});
it("should return a number for the 'affectedRows' property", function () {
assert.typeOf(result.affectedRows, "number");
});
it("should return a number for the 'warningStatus' property", function () {
assert.typeOf(result.warningStatus, "number");
});
it("expect 'warningStatus' to be 0", function () {
expect(result.warningStatus).to.equal(0);
});
Но в моем случае здесь, потому что я не явно вернуть в тестируемую функцию что-либо, что в итоге result
, даже если функция выполняется успешно, равно undefined
. И поскольку моя функция использует for-of
l oop, я не хочу использовать return await
в моей функции dataSetsMergeOp()
, потому что, хотя это сделает тесты успешными, она остановит l oop после Первая итерация.
Итак, каков рекомендуемый способ написания теста для такого рода функции?