2015-03-07 1 views
3

Скажите, что я хочу протестировать контроллер входа пользователя, который отправляет коды входа через SMS с Twilio. Как мне настроить тест, чтобы я мог высмеять Twilio и посмотреть, какие коды он отправляет обратно. Мой подход состоял в том, чтобы proxyquire объект клиента twilio и шпионить за ним с помощью синона, но я не думаю, что получаю это совершенно правильно.Как издеваться над twilio в модульных тестах с помощью синона/proxyquire или зависимости inejction в node.js

контроллер user.js

var smsClient = new twilio.RestClient(config.get('twilio_account_sid'), config.get('twilio_auth_token')); 

module.exports = { 
    checkCode: function(phone){ 
     var code = getNewCode(); 
     smsClient.sms.messages.create({ 
      from: config.get('twilio_phone_number'), 
      to: phone, 
      body: 'Your code :' + code 
     }, callback); 
    } 
} 

тестовый файл

var twilioMock = //what goes here?? 
var smsSpy = sinon.spy(twilioMock.sms.messages, 'create'); 
var User = proxyquire('../models/user', { 'mongoose': mongooseMock, 'smsClient': twilioMock }); 

... some describe and it statements ... 
twilioMock.sms.messages.should.have.been.calledOnce() //this is where I don't know what I should be checking 

// or is this the right way? 
//smsSpy.should.have.been.calledOnce() 

ответ

0

я отвечаю на это очень поздно, но это может помочь кому-то.

Я не использовал proxywire, но кажется очень похожим на rewire (просто посмотрев на ваш код). Вы должны попробовать следующее:

var twilioMock = new twilio.RestClient(config.get('twilio_account_sid'), config.get('twilio_auth_token')); 

Я больше привык к переустановке. npm i rewire --save-dev. Использование перемонтировать вы можете попробовать следующее: (концепция остается той же)

В тесте:

var rewire = require('rewire'); 
var twilioMock = new twilio.RestClient(config.get('twilio_account_sid'), config.get('twilio_auth_token')); 
var userController = rewire('./path_to_user.js') // notice use of rewire 

beforeEach(function(){ 
    this.smsClient = twilioMock; // `this` is available within your tests 
    userController.__set__('smsClient', this.smsClient); 
}); 

it('should something', sinon.test(function(){ 
    var smsSpy = this.spy(this.smsClient.sms.messages, 'create'); 
})); 
+0

Я хотел бы добавить два блока 'this.revert = UserController .__ набор __ ('smsClient', это. smsClient); 'in beforeEach и вызов' this.revert() 'в afterEach –

 Смежные вопросы

  • Нет связанных вопросов^_^