import { expect } from 'chai'; import 'mocha'; import { mock, instance, when, anyString, verify } from "ts-mockito"; class HelloEndpoint { constructor(private service: HelloService) {} async handle(evt: any): Promise { const greeting = await this.service.sayHello(evt.queryStringParameters.name); return { body: greeting }; } } // Concrete implementation class HelloService { async sayHello(name: string): Promise { throw Error("Not implemented yet") } } const mockedHelloService: HelloService = mock(HelloService); const helloService: HelloService = instance(mockedHelloService); when(mockedHelloService.sayHello(anyString())) .thenCall(name => Promise.resolve(`Hello, ${name}!`)); const helloEndpoint = new HelloEndpoint(helloService); describe("The Hello Endpoint", () => { it("Should greet the person", async () => { // Call the endpoint. const result = await helloEndpoint.handle({ queryStringParameters: { name: "Arthur Putey" } }); // Validate that the right data is passed into the service. verify(mockedHelloService.sayHello("Arthur Putey")).once(); // Validate that the right response is returned to the client. expect(result.body).to.equal("Hello, Arthur Putey!"); }); });