Скажите, что я хочу протестировать контроллер входа пользователя, который отправляет коды входа через 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()
Я хотел бы добавить два блока 'this.revert = UserController .__ набор __ ('smsClient', это. smsClient); 'in beforeEach и вызов' this.revert() 'в afterEach –