0

Twilio の API を使用して、機能する関数を既にセットアップしています。UI からパラメーターを入力すると関数が機能しますが、Mocha でテストを実行すると、関数が未定義であると表示されて失敗します。また、このテストの前に実行される Mocha の別のテストが 1 つあり、最初のテストに合格します。

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;

関数が実行される理由とテストが失敗する理由についての洞察をいただければ幸いです。

Ps エラーは以下のとおりです。

 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)
4

1 に答える 1

2

関数sendSmsはおそらく非同期です。出力をテストする前に、関数が完了するまで待つ必要があります。コールバックを作成するときに呼び出すことができるコールバックをその関数に追加することを検討し、doneclient.messages.create()を採用します。または、 から promise を返すことを検討してください。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();
    });
  });
});
于 2016-07-25T20:07:21.657 に答える