parent
ffc20750e9
commit
9c40914bba
1 changed files with 52 additions and 0 deletions
@ -0,0 +1,52 @@ |
||||
import * as http from 'http'; |
||||
import * as net from 'net' |
||||
import express from 'express'; |
||||
|
||||
type HandlerFunc = (req: express.Request, res: express.Response) => void; |
||||
|
||||
export default class TestServer { |
||||
private http?: http.Server; |
||||
|
||||
private app: express.Application; |
||||
|
||||
constructor( |
||||
private port = 0, |
||||
private address = '127.0.0.1', |
||||
){ |
||||
this.app = express(); |
||||
} |
||||
|
||||
handle(path: string, f: HandlerFunc): TestServer { |
||||
this.app.get(path, f); |
||||
return this; |
||||
} |
||||
|
||||
receiveContent(path: string, content: string): TestServer { |
||||
this.app.get(path, (_req: express.Request, res: express.Response) => { |
||||
res.status(200).send(content) |
||||
}); |
||||
return this; |
||||
} |
||||
|
||||
url(path: string = '/'): string { |
||||
if (!this.http) { |
||||
throw new Error('http server not started'); |
||||
} |
||||
|
||||
let addr = this.http.address() as net.AddressInfo; |
||||
return `http://${addr.address}:${addr.port}${path}` |
||||
} |
||||
|
||||
listen() { |
||||
this.http = http.createServer(this.app) |
||||
this.http.listen(this.port, this.address); |
||||
} |
||||
|
||||
close(): void { |
||||
if (!this.http) { |
||||
return; |
||||
} |
||||
this.http.close(); |
||||
this.http = undefined; |
||||
} |
||||
} |
Reference in new issue