• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jwalton / node-supertest-fetch / 9698097240

27 Jun 2024 02:06PM UTC coverage: 85.67% (+6.0%) from 79.656%
9698097240

push

github

jwalton
feat: All external dependencies removed in #173.

BREAKING CHANGE: Now requires node 18 or higher.

77 of 98 branches covered (78.57%)

Branch coverage included in aggregate %.

479 of 551 relevant lines covered (86.93%)

54.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

91.3
/src/Server.ts
1
import { Server as HttpServer } from 'node:http';
4✔
2
import { AddressInfo } from 'node:net';
4✔
3
import { Server as TlsServer } from 'node:tls';
4✔
4

4✔
5
export default class Server {
104✔
6
    private readonly _server: HttpServer;
104✔
7
    private readonly _startedServer: boolean = false;
104✔
8
    readonly url: string;
104✔
9

104✔
10
    private constructor(
104✔
11
        server: HttpServer,
104✔
12
        address: { port: number; family: string; address: string },
104✔
13
        started: boolean
104✔
14
    ) {
104✔
15
        this._server = server;
104✔
16
        this._startedServer = started;
104✔
17

104✔
18
        const https = server instanceof TlsServer;
104✔
19
        this.url = `${https ? 'https' : 'http'}://localhost:${address.port}`;
104✔
20
    }
104✔
21

104✔
22
    static create(server: HttpServer): Promise<Server> {
104✔
23
        return new Promise((resolve, reject) => {
104✔
24
            const address = server.address();
104✔
25
            if (typeof address === 'string') {
104!
26
                throw new Error(`Can't use a server listening on a UNIX domain socket: ${address}`);
×
27
            }
×
28

104✔
29
            if (address !== null) {
104✔
30
                return resolve(new Server(server, address, false));
4✔
31
            }
4✔
32

100✔
33
            const errHandler = (err: unknown) => {
100✔
34
                if (err && typeof err === 'object' && 'code' in err && err.code === 'EADDRINUSE') {
×
35
                    reject(new Error('Address in use'));
×
36
                }
×
37
            };
100✔
38

100✔
39
            // TODO: node-events-listener
100✔
40
            server.once('error', errHandler);
100✔
41

100✔
42
            server.once('listening', () => {
100✔
43
                server.removeListener('error', errHandler);
100✔
44
                const address = server.address() as AddressInfo;
100✔
45
                resolve(new Server(server, address, true));
100✔
46
            });
100✔
47

100✔
48
            server.listen();
100✔
49
        });
104✔
50
    }
104✔
51

104✔
52
    close() {
104✔
53
        if (this._startedServer) {
104✔
54
            this._server.close();
100✔
55
        }
100✔
56
    }
104✔
57
}
104✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc