Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

nodemailer-mock

Package Overview
Dependencies
Maintainers
1
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nodemailer-mock

Mock nodemailer module for testing

  • 1.3.11
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
20K
increased by11.4%
Maintainers
1
Weekly downloads
 
Created
Source

nodemailer-mock

nodemailer-mock Build Status Code Coverage Code Climate Issue Count Dependency Status Dev Dependency Status Downloads

Mocked nodemailer module for unit testing.

install

npm install nodemailer-mock --save-dev
yarn add -D nodemailer-mock

mock api

There are some special methods available on the mocked module to help with testing.

  • nodemailerMock.mock.reset()
    • resets the mock class to default values
  • nodemailerMock.mock.sentMail()
    • returns an array of sent emails
  • nodemailerMock.mock.shouldFailOnce()
    • will return an error on the next call to transport.sendMail()
  • nodemailerMock.mock.shouldFail(true|false)
    • indicate if errors should be returned for subsequent calls to transport.sendMail()
      • if true, return error
      • if false, return success
  • nodemailerMock.mock.mockedVerify(true|false)
    • determine if a call to transport.verify() should be mocked or passed through to nodemailer
      • if true, use a mocked callback
      • if false, pass through to a real nodemailer transport
  • nodemailerMock.mock.successResponse(success)
    • set the success message that is returned in the callback for transport.sendMail()
  • nodemailerMock.mock.failResponse(err)
    • set the err that is returned in the callback for transport.sendMail()

usage

The mocked module behaves in a similar fashion to other transports provided by nodemailer.

const nodemailerMock = require('nodemailer-mock');
const transport = nodemailerMock.createTransport();

// the email you want to send
const email = ... // <-- your email here

// send an email with nodestyle callback
transport.sendMail(email, function(err, info) {
  if (err) {
    console.log('Error!', err, info);
  } else {
    console.log('Success!', info);
  }
}

// send an email with promises
transport.sendMail(email)
.then(function(info) {
  console.log('Success!', info);
})
.catch(function(err) {
  console.log('Error!', err);
});

// verify a transport
transport.verify(function(err, success) {
  if (err) {
    console.log('Error!', err);
  } else {
    console.log('Success!', success);
  }
})

example using mocha and mockery

Here is an example of using a mocked nodemailer class in a mocha test using mockery. Make sure that any modules that require()'s a mocked module must be called AFTER the module is mocked or node will use the unmocked version from the module cache.

const should = require('should');
const mockery = require('mockery');
const nodemailerMock = require('nodemailer-mock');

describe('Tests that send email', function() {

  /* This could be an app, Express, etc. It should be 
  instantiated *after* nodemailer is mocked. */
  let app = null;

  before(function() {
    // Enable mockery to mock objects
    mockery.enable({
      warnOnUnregistered: false,
    });
    
    /* Once mocked, any code that calls require('nodemailer') 
    will get our nodemailerMock */
    mockery.registerMock('nodemailer', nodemailerMock)
    
    /*
    ##################
    ### IMPORTANT! ###
    ##################
    */
    /* Make sure anything that uses nodemailer is loaded here, 
    after it is mocked just above... */

  });
  
  afterEach(function() {
    // Reset the mock back to the defaults after each test
    nodemailerMock.mock.reset();
  });
  
  after(function() {
    // Remove our mocked nodemailer and disable mockery
    mockery.deregisterAll();
    mockery.disable();
  });
  
  it('should send an email using nodemailer-mock', function(done) {
    // call a service that uses nodemailer
    var response = ... // <-- your email code here
    
    // a fake test for something on our response
    response.value.should.be.exactly('value');
    
    // get the array of emails we sent
    const sentMail = nodemailerMock.mock.sentMail();
    
    // we should have sent one email
    sentMail.length.should.be.exactly(1);
    
    // check the email for something
    sentMail[0].property.should.be.exactly('foobar');
    
    done();
  });
  
  it('should fail to send an email using nodemailer-mock', function(done) {
    // tell the mock class to return an error
    const err = 'My custom error';
    nodemailerMock.mock.shouldFailOnce();
    nodemailerMock.mock.failResponse(err);
  
    // call a service that uses nodemailer
    var response = ... // <-- your code here
    
    // a fake test for something on our response
    response.error.should.be.exactly(err);
    
    done();
  });
  
  it('should verify using the real nodemailer transport', function(done) {
    // tell the mock class to pass verify requests to nodemailer
    nodemailerMock.mock.mockedVerify(false);
  
    // call a service that uses nodemailer
    var response = ... // <-- your code here
    
    /* calls to transport.verify() will be passed through, 
       transport.sendMail() is still mocked */

    done();
  });
});

Keywords

FAQs

Package last updated on 21 Nov 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc