Skip to content

Instantly share code, notes, and snippets.

@poetix
Last active September 25, 2017 10:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save poetix/063129c6ed1427f0fa9a9b1e9a5443a0 to your computer and use it in GitHub Desktop.
Save poetix/063129c6ed1427f0fa9a9b1e9a5443a0 to your computer and use it in GitHub Desktop.
Unit testing an endpoint class with a mocked service class
import { expect } from 'chai';
import 'mocha';
class HelloEndpoint {
constructor(private service: HelloService) {}
async handle(evt: any): Promise<any> {
const greeting = await this.service.sayHello(evt.queryStringParameters.name);
return {
statusCode: 200,
body: greeting
};
}
}
interface HelloService {
sayHello(name: string): Promise<string>
}
class TestHelloService implements HelloService {
receivedName?: string;
async sayHello(name: string): Promise<string> {
this.receivedName = name;
return `Hello ${name}!`;
}
}
const helloService = new TestHelloService();
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.
expect(helloService.receivedName).to.equal("Arthur Putey");
// Validate that the right response is returned to the client.
expect(result.body).to.equal("Hello Arthur Putey!");
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment