2016-07-25 2 views
0

Я уже установил рабочую функцию с использованием API Twilio. Функция работает, когда я вводим параметры через интерфейс, но когда я запускаю тест в Mocha, он не сообщает, что функция не определена. У меня также есть еще один тест в Mocha, который проходит перед этим тестом и проходит первый тест.Функция узла работает, но не определена при запуске через Mocha

twilioClient.js:

var config = require('./config'); 
var client = require('twilio')(config.accountSid, config.authToken); 

sendSms = function(to, message) { 
    client.messages.create({ 
    body: message, 
    to: to, 
    from: config.sendingNumber 
    // mediaUrl: 'http://www.yourserver.com/someimage.png' 
    }, function(err, data) { 
    if (err) { 
     console.error('Could not notify administrator'); 
     console.error(err); 
     return 'Could not notify administrator'; 
    } else { 
     console.log('Administrator notified'); 
     return 'Administrator notified'; 
    } 
    }); 
}; 

module.exports.sendSms = sendSms; 

Мой indexSpec.js файл:

var chai= require('chai'); 
var expect = require('chai').expect; 
var twilioNotifications = require('./Send Text/js/twilioNotifications'); 
var cfg = require('./Send Text/js/config.js'); 
var twilio = require('twilio'); 
var tClient = require('./Send Text/js/twilioClient.js'); 

describe('TwilioVars', function() { 
    it('returns true if variables are not null nor undefined', function() { 
     var tVars = cfg.twilioVars(cfg.reqConfig); 

     expect(tVars).to.equal(true); 
    }) 
}) 

describe('MsgSent', function() { 
    it('confirms if message can be sent', function() { 
     var receiver = <my number>; 
     var message = 'My message'; 
     var sentMsg = tClient.sendSms(receiver, message); 

     expect(sentMsg).to.equal('Administrator notified'); 
    }) 
}) 

Мой config.js файл:

var cfg = {}; 
cfg.accountSid = <some string>; 
cfg.authToken = <some string>; 
cfg.sendingNumber = <some string>; 

var requiredConfig = [cfg.accountSid, cfg.authToken, cfg.sendingNumber]; 

// For testing: 
cfg.reqConfig = requiredConfig; 
cfg.twilioVars = function(arr) { 
    if (arr[0] && arr[1] && arr[2]) { 
     return true; 
    } 
    return false; 
}; 
// End testing 

var isConfigured = requiredConfig.every(function(configValue) { 
    return configValue || false; 
}); 

if (!isConfigured) { 
    var errorMessage = 
    'TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_NUMBER must be set.'; 

    throw new Error(errorMessage); 
} 

// Export configuration object 
module.exports = cfg; 

Любое понимание, почему функция работает, но почему испытание терпит неудачу будет весьма оценено.

P.s. Ошибка ниже:

1) MsgSent confirms if message can be sent: 
AssertionError: expected undefined to equal 'Administrator notified' 
    at Context.<anonymous> (C:\Users\James Bradley\code_tests\twilio\twilio_test\indexSpec.js:22:22) 
    at callFn (C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:326:21) 
    at Test.Runnable.run (C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:319:7) 
    at Runner.runTest (C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:422:10) 
    at C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:528:12 
    at next (C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:342:14) 
    at C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:352:7 
    at next (C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:284:14) 
    at Immediate._onImmediate (C:\Users\James Bradley\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:320:5) 
+0

Вы можете создавать трассировки стека? –

+0

Я понял это. Придется создать другую функцию async, чтобы вернуть переменную, которая была либо «Администратор уведомлен», либо «Не удалось уведомить администратора». –

ответ

2

Ваша sendSms функция, вероятно, асинхронный, вы должны ждать его завершения перед тестированием на его выходе. Подумайте о добавлении обратного вызова к этой функции, которую вы можете вызвать, когда client.messages.create() выполняет обратный вызов и использует done. Или подумайте о возврате обещания от sendSms.

Например:

twilioClient.js:

... 
sendSms = function(to, message, cb) { 
    client.messages.create({ 
    ... 
    }, function(err, data) { 
    ... 
    cb(err, data); 
    }); 
}; 

indexSpec.js:

... 
describe('MsgSent', function() { 
    it('confirms if message can be sent', function(done) { 
    ... 
    var sentMsg = tClient.sendSms(receiver, message, function(err, data) { 
     expect(data.sentMsg).to.equal('Administrator notified'); 
     done(); 
    }); 
    }); 
}); 
Смежные вопросы