2015-07-10 51 views
0
測試快遞應用程序時,打樁第三方庫的構造

我有一個簡單的快遞應用程序看起來像這樣:與Supertest

var SendMandrillTemplate = require('send-mandrill-template'); 
var sendMandrillTemplate = new SendMandrillTemplate('api-key-goes-here'); 

var app = require('express')(); 

app.get('/', function(req, res, next) { 

    sendMandrillTemplate.sendTemplate(
     'template-name-goes-here', 
     '[email protected]', { 
      value: 123 
     }, 
     function(err) { 
      if (err) { 
       res.send('ERR - ', err) 
      } else 
       res.send('DONE') 
     }); 
}); 

module.exports = app; 

我出口的應用對象,這樣我就可以在這個安裝單獨server.js這樣 -

var app = require('./app') 

app.listen(1234, function() { 
    console.log('Running on port 1234'); 
}); 

這是爲了使我能夠更容易地使用supertest。

這裏是我的測試,到目前爲止:

var app = require('./app') 
var request = require('supertest') 

var SendMandrillTemplate = require('send-mandrill-template'); 

describe('GET /', function() { 

    var sendTemplateStub; 
    before(function() { 
     //I think i need to setup a spy on the created instance of SendMandrillTemplate.sendTemplate 
     //sendTemplateStub = //? 
    }); 

    it('calls sendTemplate on sendMandrillTemplate instance', function(done) { 
     request(app) 
      .get('/') 
      .expect(200) 
      .end(function(err, res) { 
       if (err) throw err; 

       //assert sendTemplateStub was called with 'template-name-goes-here' 
       //etc... 

       done(); 
      }) 
    }) 
}) 

正如你所看到的,我有麻煩捻熄SendMandrillTemplate構造

如果我不newing起來SendMandrillTemplate一個實例,我可以做些什麼像:

sendTemplateStub = sinon.stub(SendMandrillTemplate, 'sendTemplate') 

但當然,在這種情況下,這將不起作用......

回答

1

你可以用簡單的東西脫身

var SendMandrillTemplate = require('send-mandrill-template'); 
sinon.stub(SendMandrillTemplate.prototype, 'sendTemplate');