Я использую Mosca с TypeScript на Node.js и написал собственный брокер для удовлетворения своих потребностей.
Когда я тестирую свои методы по отдельности (с использованием библиотеки 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]
});
Как видите, я пытаюсь закрыть сервер MQTT, который я создал вначале с new Broker
, используя синтаксис afterAll
.Однако по какой-то причине я получаю эту ошибку.
Хорошо отметить, что я пытался использовать broker.server.close()
в реальном тесте, где я вызывал этот метод всякий раз, когда клиент подключался к моему брокеру, ион работал отлично, сервер закрывался, когда я просил об этом.
Я хотел бы знать, что я делаю здесь неправильно.Ошибка заставляет меня думать, что сервер уже закрыт, но я не понимаю, почему так будет, если я не скажу остановить его.