我在 Node.js 上使用 Mosca 和 TypeScript,并编写了一个自定义代理来满足我的需求。
当我单独测试我的方法(使用 Jest UT 库)时,一切似乎都运行良好,直到测试结束,我收到以下错误:
Error: This ascoltatore is closed
at TrieAscoltatore.raiseIfClosed [as _raiseIfClosed] ([path]\node_modules\ascoltatori\lib\abstract_ascoltatore.js:72:11)
at TrieAscoltatore.subscribe ([path]\node_modules\ascoltatori\lib\trie_ascoltatore.js:40:8)
at Server.<anonymous> ([path]\node_modules\mosca\lib\server.js:267:22)
at Server.emit (events.js:194:15)
at [path]\node_modules\mosca\lib\server.js:242:12
at makeCall ([path]\node_modules\fastseries\series.js:117:7)
at ResultsHolder.release ([path]\node_modules\fastseries\series.js:96:9)
at Server.NoResultsHolder.release ([path]\node_modules\fastseries\series.js:72:22)
at Object.onceWrapper (events.js:277:13)
at Server.emit (events.js:189:13)
at emitListeningNT (net.js:1304:10)
at process._tickCallback (internal/process/next_tick.js:63:19)
[path]\node_modules\ascoltatori\lib\abstract_ascoltatore.js:72
throw new Error("This ascoltatore is closed");
^
这是我的 broker.ts 的样子:
import { Server, Client, Packet } from 'mosca';
/**
* Broker
* @description MQTT Broker
*/
export class Broker {
/** MQTT server */
public server: Server;
constructor(
) {
const settings = {
port: 1883,
host: '127.0.0.1'
};
this.server = new Server(settings);
});
[methods]
}
这是我的 broker.spec.ts 测试文件:
import { Broker } from './broker';
import { Packet } from 'mosca';
describe("Broker", () => {
let broker = new Broker;
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://127.0.0.1');
afterAll(() => {
broker.server.close();
});
[Some tests]
});
如您所见,我正在尝试new Broker
使用afterAll
语法关闭我在开头创建的 MQTT 服务器。但是,由于某种原因,我收到此错误。
值得注意的是,我尝试broker.server.close()
在实际测试中使用,每当客户端连接到我的代理时,我都会调用该方法,并且它运行良好,当我要求服务器关闭时,它正在关闭。
我想知道我在这里做错了什么。该错误使我认为服务器已经关闭,但我不明白如果我不告诉它停止为什么会这样。