правильный способ для модульного тестирования облачной функции Firebase, которая вызывает внешний API - PullRequest
0 голосов
/ 05 октября 2018

какой правильный способ провести модульное тестирование облачной функции firebase, которая вызывает внешний API.Моя функция Firebase Cloud выглядит следующим образом:

const functions = require('firebase-functions');
var Analytics = require('analytics-node');
//fetching segment api key
var segmentKey = functions.config().segment.key;
var analytics = new Analytics(segmentKey);

/**
 * this gf will get called when document is added to 
 * app-open-track collection.
 */
exports.trackAppOpen = functions.firestore
  .document('app-open-track/{token}')
  .onCreate((snap, context) => {
    const snapValue = snap.data();
    const userId = snapValue.hasOwnProperty('userId') ? snapValue.userId : "";
    const deviceId = snapValue.hasOwnProperty('deviceId') ? snapValue.deviceId : "";
    const deviceType = snapValue.hasOwnProperty('deviceType') ? snapValue.deviceType : "";
    const osVersion = snapValue.hasOwnProperty('osVersion') ? snapValue.osVersion : "";
    const createdAt = snapValue.hasOwnProperty('createdAt') ? snapValue.createdAt : "";
    //checking user id exists if yes proceed
    if (!userId) {
      return false;
    } else {
      //sending data to segment API
      analytics.track({
        "type": "track",
        "userId": userId,
        "event": "app opened",
        "properties": {
          "deviceId": deviceId,
          "deviceType": deviceType,
          "osVersion": osVersion,
          "createdAt": createdAt
        }
      });
    }
    return true;
  });

Я написал для этого тестовый пример:

const chai = require('chai');
const assert = chai.assert;
const test = require('firebase-functions-test')();
test.mockConfig({ segment: { key: 'MEhxCjq9YcWTRHLa7y2ArYHEugmRJUV0' } });
const trackOpenTestFunctions = require('../index.js');
describe('trackAppOpenCase', () => {
    it('valid request parameters -this should send data to segment API and return true', () => {
        // Make snapshot
        const snap = test.firestore.makeDocumentSnapshot({ deviceId: '456754765', osVersion: '12.3', userId: '0000007' }, 'app-open-track/{token}');
        // Call wrapped function with the snapshot
        const wrapped = test.wrap(trackOpenTestFunctions.trackAppOpen);
        wrapped(snap);
        return assert.equal(wrapped(snap), true);
    });

    it('removing userId key from request - this should not send data to segment API and return false', () => {
        // Make snapshot
        const snap = test.firestore.makeDocumentSnapshot({ deviceId: '456754765', osVersion: '12.3' }, 'app-open-track/{token}');
        // Call wrapped function with the snapshot
        const wrapped = test.wrap(trackOpenTestFunctions.trackAppOpen);
        wrapped(snap);
        return assert.equal(wrapped(snap), false);
    });

});

. Проблема в том, что тест не ожидает завершения API, чтоэто лучший способ проверить такие условия, нужно ли мне изменить свой код, чтобы я мог проверить его лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...