Skip to content

Commit 9e2ff4b

Browse files
committed
reconnect: Simplify code
1 parent a8298f7 commit 9e2ff4b

File tree

2 files changed

+31
-34
lines changed

2 files changed

+31
-34
lines changed

packages/reconnect/index.js

+7-9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ class Reconnect extends EventEmitter {
99
this._timeout = null;
1010
}
1111

12+
#onDisconnect = () => {
13+
this.scheduleReconnect();
14+
};
15+
1216
scheduleReconnect() {
1317
const { entity, delay, _timeout } = this;
1418
clearTimeout(_timeout);
@@ -38,18 +42,12 @@ class Reconnect extends EventEmitter {
3842

3943
start() {
4044
const { entity } = this;
41-
const listeners = {};
42-
listeners.disconnect = () => {
43-
this.scheduleReconnect();
44-
};
45-
46-
this.listeners = listeners;
47-
entity.on("disconnect", listeners.disconnect);
45+
entity.on("disconnect", this.#onDisconnect);
4846
}
4947

5048
stop() {
51-
const { entity, listeners, _timeout } = this;
52-
entity.removeListener("disconnect", listeners.disconnect);
49+
const { entity, _timeout } = this;
50+
entity.removeListener("disconnect", this.#onDisconnect);
5351
clearTimeout(_timeout);
5452
}
5553
}

packages/reconnect/test.js

+24-25
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,37 @@
11
import _reconnect from "./index.js";
2-
import { EventEmitter } from "@xmpp/events";
2+
// eslint-disable-next-line n/no-extraneous-import
3+
import Connection from "@xmpp/connection";
34

4-
test("it schedule a reconnect when disconnect is emitted", (done) => {
5-
const entity = new EventEmitter();
5+
test("schedules a reconnect when disconnect is emitted", () => {
6+
const entity = new Connection();
67
const reconnect = _reconnect({ entity });
8+
const spy_scheduleReconnect = jest.spyOn(reconnect, "scheduleReconnect");
79

8-
reconnect.scheduleReconnect = () => {
9-
expect.pass();
10-
done();
11-
};
12-
10+
expect(spy_scheduleReconnect).toHaveBeenCalledTimes(0);
1311
entity.emit("disconnect");
12+
expect(spy_scheduleReconnect).toHaveBeenCalledTimes(1);
1413
});
1514

1615
test("#reconnect", async () => {
17-
expect.assertions(3);
18-
19-
const entity = new EventEmitter();
16+
const service = "service";
17+
const lang = "lang";
18+
const domain = "domain";
19+
20+
const entity = new Connection({
21+
service,
22+
lang,
23+
domain,
24+
});
2025
const reconnect = _reconnect({ entity });
2126

22-
entity.options = {
23-
service: "service",
24-
lang: "lang",
25-
domain: "domain",
26-
};
27-
28-
entity.connect = (service) => {
29-
expect(service).toBe(entity.options.service);
30-
};
31-
32-
entity.open = ({ domain, lang }) => {
33-
expect(domain).toBe(entity.options.domain);
34-
expect(lang).toBe(entity.options.lang);
35-
};
27+
const spy_connect = jest.spyOn(entity, "connect").mockResolvedValue();
28+
const spy_open = jest.spyOn(entity, "open").mockResolvedValue();
3629

3730
await reconnect.reconnect();
31+
32+
expect(spy_connect).toHaveBeenCalledWith(service);
33+
expect(spy_open).toHaveBeenCalledWith({
34+
domain,
35+
lang,
36+
});
3837
});

0 commit comments

Comments
 (0)