Я бы, вероятно, использовал здесь классы для лучшей тестируемости вашего кода. что-то вроде этого
class SomeClass {
constructor(spirSms) {
this.spirSms_ = spirSms;
}
send(params) {
logger.info('Sending new sms...');
const { to: recipients, invalidNumber } = params;
const promises = recipients.map(number =>
this.spirSms_({ to: number, subject: params.subject, body: params.body })
);
return Promise.all(promises).then(() => {
logger.info(`SMS has been sent to ${recipients.toString()}!`);
return {
message: `SMS has been sent to ${recipients.toString()}`,
data: {
recipients,
invalid_recipients: invalidNumber
}
};
});
}
}
module.exports = SomeClass;
, и тогда у вас будет main.js
, который будет создавать экземпляр вашего класса и вводить spirSms
const spirA = new spir(
process.env.USERNAME,
process.env.PASSWORD,
process.env.API_KEY,
process.env.SMS_WORKSPACE_ID,
process.env.SMS_TEMPLATE_ID
);
const spirSMS = params => {
return new Promise((resolve, reject) => {
spirA.sms(params).then(resolve, reject);
});
};
const someClass = new SomeClass(spirSMS);
someClass.send(params);
Теперь в вашем тесте, когда вы будете тестировать SomeClass
, вы можете ввести любой макет spirSms
, который в основном будет делать то, что вы ищете.
Надеюсь, это поможет.