1

我在 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()在实际测试中使用,每当客户端连接到我的代理时,我都会调用该方法,并且它运行良好,当我要求服务器关闭时,它正在关闭。

我想知道我在这里做错了什么。该错误使我认为服务器已经关闭,但我不明白如果我不告诉它停止为什么会这样。

4

0 回答 0