Node JS unit test - облачная функция, как вызвать внутреннюю функцию - PullRequest
0 голосов
/ 08 января 2019

Я использую AVA Framework (https://github.com/avajs/ava/blob/HEAD/docs/01-writing-tests.md) протестировать облачную функцию на GCP, написанную на NodeJS. я пытаюсь провести модульное тестирование внутренней функции внутри моей облачной функции.

Мой код тестирования выглядит следующим образом:

const test = require(`ava`);
const uuid = require(`uuid`);
const sinon = require(`sinon`);


const triggerResultsService = require(`..`).triggerResultsService;
const consoleLog = sinon.stub(console, 'log');
const sendToTransferService = require(`..`).triggerResultsService.sendToTransferService;

test('resolves with unicorn', t => {

    const filename = uuid.v4();
     sendToTransferService(filename, () =>{


     });

     return Promise().then(result => {
         t.is(result, 'unicorn');
     });
});

Код функции My Cloud выглядит следующим образом:

/**
 * Generic background Cloud Function to be triggered by Cloud Storage.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */

var request = require("request");

exports.triggerResultsService = (event, callback) => {
  var file = event.data;
  var fileName = file.name.substr(file.name.lastIndexOf('/')).toLowerCase().trim();
  if(!fileName.includes('temp-') && fileName.includes('.csv.gz')) {
    console.log("file name is in correct location, sending options");
    sendToTransferService(file);
    sendStatusEmail("Transfer File Call successful");
  };
  callback();
};

function sendToTransferService(file) {
  var options = {
    method: 'POST',
    uri: process.env.TRANSFER_SERVICE_URL,
    body: {
       fileName: file.name,
       bucketName: file.bucket
    },
    json: true
   };
  return new Promise(function (resolve, reject) {
    request(options, function (err, resp) {
       if (err) {
          console.log(err);
          return reject({err: err});
       }
    return resolve({responsebody:resp.body});
    });
  });
}

   function sendStatusEmail(statusMessage) {
  var options = {
    method: 'POST',
    uri: process.env.EMAIL_NOTIFICATION_URL,
    body: {
        from: process.env.EMAIL_FROM,
        to: [process.env.SLACK_EMAIL],
        cc: [''],
        bcc: [''],
        subject: process.env.EMAIL_SUBJECT,
        body: statusMessage
    },
    json: true
  };

  return new Promise(function (resolve, reject) {
    request(options, function (err, resp) {
       if (err) {
          console.log(err);
          return reject({err: err});
       }
    return resolve({responsebody:resp.body});
    });
 });
}

Я не могу добраться до функции sendToTransferService. Любые идеи, что мне нужно / объявить

Заранее спасибо

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что ваш самый простой путь - превратить эту функцию в собственный модуль и экспортировать ее оттуда. Он будет доступен для любого другого кода, который импортирует модуль, включая ваш код облачных функций.

...