如何告诉firebase-admin停止(运行测试时)?

时间:2018-09-19 22:55:43

标签: javascript node.js firebase firebase-admin

是的,我可以在我的摩卡测试中运行process.exit()--exit,但这似乎是错误的。

我正在维护一些代码中的firebase-admin,并且尝试运行mocha测试,但是根据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();

景气。做完了现在我只看到不会死的计时器,如何杀死它?我尝试查看该源代码,这使我指向了这个小地方:

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困住了?

2 个答案:

答案 0 :(得分:2)

@Wayne Werner正确回答了他自己的问题。

我为使用firebase admin SDK和firestore的人们提供了更多背景信息。 GitHub issue有助于回答我的问题。

您需要确保在Mocha上下文中使用Config::ConnectWithoutContext ("/NodeList/1/DeviceList/*/Phy/MonitorSnifferRx", MakeCallback (&DecodeRxPktCB)); 初始化firebase,然后在Mocha上下文中使用before()删除应用程序

after()

答案 1 :(得分:1)

事实证明,firebase文档确实确实是真的含糊不清。 It says

  

使该应用无法使用,并释放所有相关服务的资源。

听起来像是“使您的应用托管在firebase.com上,无法使用,并释放所有相关服务的资源”

真正的意思是“使该应用程序的Javascript实例不可用,并释放资源...”

因此,要使所有内容在Mocha测试中关闭,您需要使用app.delete();

它可能看起来像这样:

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

根据您的需求,它可能看起来有些不同。