Building APIs doing Outside-In TDD in Node and Typescript
What you'll learn
- Build REST API in Node and TypeScript
- Test with Jest framework
- Outside-in TDD approach a.k.a. mockist a.k.a. London school TDD
- Test doubles, mocks, spies, stubs, fakes and dummies
- Mongo MongoDB Mongoose
- Node and Express
- Familiar with Node, Express and Typescript
- Familiar writing tests
- Familiar with docker and mongodb
In this course we will implement a REST API in Node with express and typescript. We will store data in a mongodb database using mongoose. In order to implement this REST API, we will receive an OpenAPI Specification (OAS) file that will be the base to design and build our application.
The API we are going to build is a clone of the One Time Secret site. We will create an application that stores our secrets and provides us a URL to access them later, but with the condition that we can access that URL one time only. Whenever we attempt to retrieve the same secret again, hitting the same URL for a second time, we will receive an error.
Given that we already know how the public interface would look like with the OpenAPI Specification file provided, we will be using Test Driven Development (TDD) but following an Outside-In approach, also known as mockist approach or London School TDD. We will start writing the acceptance criteria tests, keeping them in red, we will start the double cycle and write unit tests for the inner components. That way we will build our way inside the application, one level at a time until we can make the acceptance test completely pass. While coding, even though we already have a quite clear direction of our application design, we will try to get inspired with DDD, Hexagonal Architecture and CQRS.
Kudos to @Panos for the constructive feedback that helped to make this course better.
Who this course is for:
- Developers with certain experience writing code
- Developers with certain experience writing tests
- Developers with certain experience practicing TDD
Spent quite a few years at University getting a:
- Computer Science Degree
- Master in Informatics Engineering
- European Master in Software Engineering
Before that, during, and after also spend some time doing:
~15 years writing code
~10 years professional experience
~ 5 years XP practitioner
Managed to collaborate from early stage startups to world wide companies, as well as international consultancy companies offering services to multiple customers. Also, in the meanwhile, did several pet projects.