1 import { fork, ChildProcess } from 'child_process'
5 private static instance: MockSmtpServer
6 private started = false
7 private emailChildProcess: ChildProcess
8 private emails: object[]
10 private constructor () {
11 this.emailChildProcess = fork(`${__dirname}/email-child-process`, [])
13 this.emailChildProcess.on('message', (msg) => {
15 return this.emails.push(msg.email)
20 collectEmails (emailsCollection: object[]) {
21 return new Promise((res, rej) => {
23 this.emails = emailsCollection
27 // ensure maildev isn't started until
28 // unexpected exit can be reported to test runner
29 this.emailChildProcess.send({ start: true })
30 this.emailChildProcess.on('exit', () => {
31 return rej(new Error('maildev exited unexpectedly, confirm port not in use'))
33 this.emailChildProcess.on('message', (msg) => {
35 return rej(new Error(msg.err))
38 this.emails = emailsCollection
45 process.kill(this.emailChildProcess.pid)
47 this.emailChildProcess = null
48 MockSmtpServer.instance = null
51 static get Instance () {
52 return this.instance || (this.instance = new this())
56 // ---------------------------------------------------------------------------