Как сказать firebase-admin остановиться (при запуске тестов)? - PullRequest
0 голосов
/ 20 сентября 2018

Да, я могу запустить process.exit() или --exit с моими тестами mocha, но это кажется неправильным.

У меня есть firebase-admin в некотором коде, который я поддерживаю, и япытаюсь запустить тесты мокко, но в соответствии с wtfnode:

wtfnode node_modules/.bin/_mocha --compilers coffee:coffee-script/register

Firebase отвечает за сохранение моего процесса открытым:

- Timers:
  - (3300000 ~ 55 min) (anonymous) @ /home/wayne/programming/universe/library/server/node_modu
les/firebase-admin/lib/firebase-app.js:147
- Intervals:
  - (45000 ~ 45 s) (anonymous) @ /home/wayne/programming/universe/library/server/node_modules/
firebase-admin/lib/database/database.js:199

Большое спасибо, Firebase.Это расстраивает.Я могу исправить часть базы данных:

db = app.database();
db.goOffline();

Boom.Готово.Теперь я вижу таймер, который не умрет. Как мне это убить?Я попытался посмотреть на этот исходный код, который указывает мне на это маленькое пятно:

FirebaseAppInternals.prototype.setTokenRefreshTimeout = function (delayInMilliseconds, numRetries) {
    var _this = this;
    this.tokenRefreshTimeout_ = setTimeout(function () {
        _this.getToken(/* forceRefresh */ true)
            .catch(function (error) {
            // Ignore the error since this might just be an intermittent failure. If we really cannot
            // refresh the token, an error will be logged once the existing token expires and we try
            // to fetch a fresh one.
            if (numRetries > 0) {
                _this.setTokenRefreshTimeout(60 * 1000, numRetries - 1);
            }
        });
    }, delayInMilliseconds);
};

К сожалению, я не уверен, как получить это tokenRefreshTimeout_, поэтому я могу cancelTimer.

Есть ли способ сообщить firebase-admin, что я закончил, и это действительно нужно прекратить сейчас, или я застрял с --exit?

1 Ответ

0 голосов
/ 20 сентября 2018

Оказывается, документация Firebase просто действительно неоднозначна. Там написано

Делает это приложение непригодным для использования и освобождает ресурсы всех связанных служб.

То, что для меня звучало так: «Оказывает ваше приложение, размещенный на firebase.com, непригодный для использования и освобождающий ресурсы всех связанных служб "

Что на самом деле означает" делает этот экземпляр Javascript приложения непригодным для использования и освобождает ресурсы ... "

Итак, чтобы завершить все в тесте мокко, вам нужно использовать app.delete();

Это может выглядеть примерно так:

after(() => {
    var app = require('@yourstuff/FirebaseApp');
    app.delete();
});

Или может выглядеть немногоразные, в зависимости от ваших потребностей.

...