From 2029e0696f4aca4f5fbf77a9481e93601f2998ae Mon Sep 17 00:00:00 2001 From: Selim Belhaouane Date: Sun, 30 Oct 2022 09:02:06 -0400 Subject: [PATCH] update readme --- README.md | 167 +++++------------------------------------------------- 1 file changed, 15 insertions(+), 152 deletions(-) diff --git a/README.md b/README.md index cf43a8d..0dedb21 100644 --- a/README.md +++ b/README.md @@ -1,170 +1,33 @@ -# Testing Express +# Fast Prisma Tests -This example shows how to implement integration tests using [Express](https://expressjs.com/), [Supertest](https://github.com/visionmedia/supertest) and [Prisma Client](https://www.prisma.io/docs/concepts/components/prisma-client). It is based on a SQLite database, you can find the database file with some dummy data at [`./prisma/dev.db`](./prisma/dev.db). +Companion repo for my blog post: [Speedy Prisma+PostgreSQL Tests](https://selimb.hashnode.dev/speedy-prisma-pg-tests). +Based on Prisma's official [testing-express](https://github.com/prisma/prisma-examples/tree/latest/typescript/testing-express) example. +The first commit in this repo is in fact a copy of that example. -## Getting started +## Setup -### 1. Download example and install dependencies +### 1. Install NPM dependencies -Download this example: - -``` -curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=2 prisma-examples-latest/typescript/testing-express -``` - -Install npm dependencies: - -``` -cd testing-express -npm install -``` - -
Alternative: Clone the entire repo - -Clone this repository: - -``` -git clone git@github.com:prisma/prisma-examples.git --depth=1 -``` - -Install npm dependencies: - -``` -cd prisma-examples/typescript/testing-express -npm install -``` - -
- -### 2. Create and seed the database - -Run the following command to create your SQLite database file. This also creates the `User` and `Post` tables that are defined in [`prisma/schema.prisma`](./prisma/schema.prisma): - -``` -npx prisma migrate dev --name init -``` - -When `npx prisma migrate dev` is executed against a newly created database, seeding is also triggered. The seed file in [`prisma/seed.ts`](./prisma/seed.ts) will be executed and your database will be populated with the sample data. - - -### 2. Start the REST API server - -Rename the `.env.example` to `.env` and execute this command to start the server: - -``` -npm run dev -``` - -The server is now running on `http://localhost:3000`. You can send the API requests implemented in `index.js`, e.g. [`http://localhost:3000/feed`](http://localhost:3000/feed). - -### 3. Testing the endpoints - -The tests are located in the `tests` folder. In these you will find tests handled for cases if a same user is added twice and also to check if the users added are obtained correctly. - -The tests can be run using: - -``` -npm test -``` - -## Using the REST API - -You can access the REST API of the server using the following endpoints: - -### `GET` - -- `/user`: Fetch all users - -### `POST` - -- `/user`: Create a new user - - Body: - - `email: String` (required): The email address of the user - - `name: String` (optional): The name of the user - - -## Switch to another database (e.g. PostgreSQL, MySQL, SQL Server, MongoDB) - -If you want to try this example with another database than SQLite, you can adjust the the database connection in [`prisma/schema.prisma`](./prisma/schema.prisma) by reconfiguring the `datasource` block. - -Learn more about the different connection configurations in the [docs](https://www.prisma.io/docs/reference/database-reference/connection-urls). - -
Expand for an overview of example configurations with different databases - -### PostgreSQL - -For PostgreSQL, the connection URL has the following structure: - -```prisma -datasource db { - provider = "postgresql" - url = "postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA" -} ``` - -Here is an example connection string with a local PostgreSQL database: - -```prisma -datasource db { - provider = "postgresql" - url = "postgresql://janedoe:mypassword@localhost:5432/notesapi?schema=public" -} +$ npm install ``` -### MySQL +### 2. Start the database -For MySQL, the connection URL has the following structure: +You can run the following to start a new PostgreSQL Docker container: -```prisma -datasource db { - provider = "mysql" - url = "mysql://USER:PASSWORD@HOST:PORT/DATABASE" -} ``` - -Here is an example connection string with a local MySQL database: - -```prisma -datasource db { - provider = "mysql" - url = "mysql://janedoe:mypassword@localhost:3306/notesapi" -} +$ ./scripts/pg-docker.sh ``` -### Microsoft SQL Server - -Here is an example connection string with a local Microsoft SQL Server database: +You're otherwise free to start postgres however you'd like. -```prisma -datasource db { - provider = "sqlserver" - url = "sqlserver://localhost:1433;initial catalog=sample;user=sa;password=mypassword;" -} -``` +### 3. Configuration -### MongoDB +Rename the `.env.example` file to `.env`, and make sure `DB_URL` is accurate -- if you started postgres with `pg-docker.sh`, then you don't need to change anything. -Here is an example connection string with a local MongoDB database: +## Running Tests -```prisma -datasource db { - provider = "mongodb" - url = "mongodb://USERNAME:PASSWORD@HOST/DATABASE?authSource=admin&retryWrites=true&w=majority" -} ``` -Because MongoDB is currently in [Preview](https://www.prisma.io/docs/about/releases#preview), you need to specify the `previewFeatures` on your `generator` block: - +$ npm test ``` -generator client { - provider = "prisma-client-js" - previewFeatures = ["mongodb"] -} -``` -
- -## Next steps - -- Check out the [Prisma docs](https://www.prisma.io/docs) -- Share your feedback in the [`prisma2`](https://prisma.slack.com/messages/CKQTGR6T0/) channel on the [Prisma Slack](https://slack.prisma.io/) -- Create issues and ask questions on [GitHub](https://github.com/prisma/prisma/) -- Watch our biweekly "What's new in Prisma" livestreams on [Youtube](https://www.youtube.com/channel/UCptAHlN1gdwD89tFM3ENb6w) \ No newline at end of file