Работа развернутой асинхронной облачной функции, запускаемой по протоколу http, запускается при локальном тестировании - PullRequest
0 голосов
/ 09 июля 2019

У меня есть запускаемая по HTTP облачная функция 'getCategories', которая просто извлекает некоторые документы из коллекции пожарного хранилища.

При развертывании она работает нормально, как показано в журнале пожарной базы.Когда я запускаю ту же функцию локально «онлайн» с ava, эта функция просто закрывается, ожидая сбора документации.

На самом деле, я пропускаю трассировку журнала «после», которая появляется в журнале Firebase.Даже res в модульном тесте не содержит никакого ответа JSON.

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

Я пытался переключиться с узла v8 на узел v10 (который в настоящее время находится в бета-версии для firebase) безрезультатно.

Я пытался удалить любые правила безопасности базы данных как отчаянныепопытаться, зная, что доступ к базе данных осуществляется с правами администратора.Никаких результатов тоже нет.

Я удалил все другие тесты ava, чтобы не было проблем с параллелизмом.

Облачная функция:

exports.getCategories = functions.region('europe-west1').https.onRequest(async (req, res) => {
  let cats;
  try {
    const categoriesRef = db.collection("categories").orderBy("order");
    console.log('before',new Date().getTime());
    const categories = await categoriesRef.get();
    console.log('after',new Date().getTime());
    cats = [];
    categories.forEach(category => {
      console.info('Got cat with id: ',category.id,', desc:',category.data().desc);
      cats.push({'id':category.id, 'd':category.data().desc});
    });
    res.set('Access-Control-Allow-Origin', '*').status(200).send(cats);
  } catch (e) {
    console.log('err:', e);
    res.set('Access-Control-Allow-Origin', '*').status(500).end();
  }
});

Модульный тест ava:

ava('getCategories: no parameters', async t => {
  const req = { query: {text: 'pippo'} };
  const res = {send: sinon.stub()};

  console.log('start',new Date().getTime())
  await myFunctions.getCategories(req, res);
  console.log('stop',new Date().getTime())

  t.true(true);
});

Журнал базы данных:

7: 21: 47.862 PM getCategories Выполнение функции заняло 88 мс, завершено с кодом состояния: 304

7:21: 47.861 PM getCategories Got cat с id: 1, desc: C

7: 21: 47.861 PM getCategories Got cat с id: 3, des: B

7: 21: 47.861 PMgetCategories Got cat с id: 2, desc: A

7: 21: 47.861 PM getCategories after 1562692907860

7: 21: 47.780 PM getCategories до 1562692907780

7: 21: 47.775 PM getCategories Начало выполнения функции

и журнал модульных тестов:

ubuntu @ ubuntu: ~ / workspaces / workspace_firebase / dev-com / functions $ npm test--verbose

нпм информация о том, что он работает, если он оканчивается ок

нпм глагол кли ['/home/ubuntu/.nvm/versions/node/v10.15.3/bin / node ', npm verb cli' /home/ubuntu/.nvm/versions/node/v10.15.3/bin/npm ', npm verb cli' test ', npm verb cli' --verbose ']

информация npm с использованием npm@6.9.2

информация npm с использованием node@v10.15.3

npm verb run-script ['pretest', 'test', 'posttest']

функции жизненного цикла информации npm @ ~ pretest: functions @

функции жизненного цикла информации npm @ ~ test: functions @

functions @ test / home / ubuntu / workspaces / workspace_firebase / dev-com / functions

nyc ava

⠦ start 1562693063436

⠧ до 1562693063439

⠙ stop 1562693063726

1 тест пройден

...

выход глагола npm [0, истина]

синхронизация npm npm Завершено за 5986 мс

нпм info ok

...