Skip to content

Instantly share code, notes, and snippets.

@joerx
Last active January 15, 2021 06:09
Show Gist options
  • Save joerx/ea16b9af330e0c346155 to your computer and use it in GitHub Desktop.
Save joerx/ea16b9af330e0c346155 to your computer and use it in GitHub Desktop.
Stubbing email sending in tests
// This is the simplest possible approach - use a custom module to wrap a single, pre-configured
// mail transport instance and then use sinon.js to stub out that modules sendmail()
// This approach has its limitations, but it is still better than having 'if(NODE_ENV === 'test')'
// all over the code base.
// -- app/sendmail.js --
var nodemailer = require('nodemailer');
var config = require('config').email;
var transport = nodemailer.createTransport(config.transport, config.transportOptions);
module.exports.sendmail = function(message) {
return transport.sendMail(message);
}
// -- test/common.js --
// modules are loaded only once and then cached, so we get the same instance every time
var sendmail = require('../app/sendmail');
sinon.stub(sendmail, 'sendmail').yields(null, {
message: '250 2.0.0 OK 1403606574 og3sm31277838pbc.48 - gsmtp',
messageId: 'adefbd50fb8c11e3a3ac0800200c9a66@localhost'
});
// -- in all test files --
require('../../common'); // include the common setup for every test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment