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