export abstract class DateTime { abstract now(): Date; } export class DateTimeActual implements DateTime { now(): Date { return new Date(); } } // here we explicitly declare a mock to be used in tests export class DateTimeMock implements DateTime { time: Date = new Date(2019, 1, 1); setup(time: Date) { this.time = time; } addSeconds(seconds: number) { this.time.setSeconds(this.time.getSeconds() + seconds); } now() { return new Date(this.time.toISOString()); } }