2017-12-07 2 views
1

Ich habe eine Funktion möchte ich testen möchte:Knoten - Stub nodemailer Transport für Tests

var mailServerOptions = {....}; 

var transporter = nodemailer.createTransport(mailServerOptions); 

exports.sendTemplateEmail = (to, template, data) => { 
    var mailOptions = {....} 

    return new Promise((resolve, reject) => { 
     transporter.sendMail(mailOptions, (err, result) => { 
      if (err) { 
       return reject(err) 
      } 

      return resolve(result); 
     }); 
    }); 
} 

Wie kann ich die transporter.sendMail in dieser Situation Stummel? Ich fand diese post, aber es passt nicht wirklich, was ich versuche zu tun.

Ich kann den Sendenteil zu seiner eigenen Funktion verschieben und stub, wenn ich wirklich muss, aber es wäre nett, wenn ich diesen Weg nicht gehen müsste.

Antwort

0

Dieses Beispiel funktioniert für mich

======== ======== myfile.js

// SOME CODE HERE 

transporter.sendMail(mailOptions, (err, info) => { 
    // PROCESS RESULT HERE 
}); 

======== myfile in Ordnung. spec.js (Einheitstestdatei) ========

const sinon = require('sinon'); 
const nodemailer = require('nodemailer'); 
const sandbox = sinon.sandbox.create(); 

descript('XXX',() => { 
    it('XXX', done => { 
    const transport = { 
     sendMail: (data, callback) => { 
     const err = new Error('some error'); 
     callback(err, null); 
     } 
    }; 
    sandbox.stub(nodemailer, 'createTransport').returns(transport); 

    // CALL FUNCTION TO TEST 

    // EXPECT RESULT 
    }); 
});