浏览代码

converse-disco: Catch and report errors that happen during tests

JC Brand 6 年之前
父节点
当前提交
78c7ded2e5
共有 1 个文件被更改,包括 25 次插入0 次删除
  1. 25 0
      src/headless/converse-disco.js

+ 25 - 0
src/headless/converse-disco.js

@@ -410,6 +410,12 @@ converse.plugins.add('converse-disco', {
                         if (_.isNil(name) || _.isNil(xmlns)) {
                             throw new Error("name and xmlns need to be provided when calling disco.stream.getFeature");
                         }
+                        if (_converse.stream_features === undefined && !_converse.api.connection.connected()) {
+                            // Happens during tests when disco lookups happen asynchronously after teardown.
+                            const msg = `Tried to get feature ${name} ${xmlns} but _converse.stream_features has been torn down`;
+                            _converse.log(msg, Strophe.LogLevel.WARN);
+                            return;
+                        }
                         return _converse.stream_features.findWhere({'name': name, 'xmlns': xmlns});
                     }
                 },
@@ -564,6 +570,12 @@ converse.plugins.add('converse-disco', {
                         if (_.isNil(jid)) {
                             return _converse.disco_entities;
                         }
+                        if (_converse.disco_entities === undefined && !_converse.api.connection.connected()) {
+                            // Happens during tests when disco lookups happen asynchronously after teardown.
+                            const msg = `Tried to look up entity ${jid} but _converse.disco_entities has been torn down`;
+                            _converse.log(msg, Strophe.LogLevel.WARN);
+                            return;
+                        }
                         const entity = _converse.disco_entities.get(jid);
                         if (entity || !create) {
                             return entity;
@@ -619,6 +631,13 @@ converse.plugins.add('converse-disco', {
                         }
                         await _converse.api.waitUntil('discoInitialized');
                         let entity = await _converse.api.disco.entities.get(jid, true);
+
+                        if (_converse.disco_entities === undefined && !_converse.api.connection.connected()) {
+                            // Happens during tests when disco lookups happen asynchronously after teardown.
+                            const msg = `Tried to get feature ${feature} for ${jid} but _converse.disco_entities has been torn down`;
+                            _converse.log(msg, Strophe.LogLevel.WARN);
+                            return;
+                        }
                         entity = await entity.waitUntilFeaturesDiscovered;
                         const promises = _.concat(
                             entity.items.map(item => item.hasFeature(feature)),
@@ -756,6 +775,12 @@ converse.plugins.add('converse-disco', {
                  */
                 async getIdentity (category, type, jid) {
                     const e = await _converse.api.disco.entities.get(jid, true);
+                    if (e === undefined && !_converse.api.connection.connected()) {
+                        // Happens during tests when disco lookups happen asynchronously after teardown.
+                        const msg = `Tried to look up category ${category} for ${jid} but _converse.disco_entities has been torn down`;
+                        _converse.log(msg, Strophe.LogLevel.WARN);
+                        return;
+                    }
                     return e.getIdentity(category, type);
                 }
             }