@ancxkush/create-ts-express-mongo-starter-code
Version:
NodeJS/Express starter code with - TypeScript, MongoDB setup, Exception Handler, Logger, HTTP testing example, Swagger Docs example, Mongoose model example, JOI validation example, CRUD operations example
80 lines (63 loc) • 1.88 kB
text/typescript
import app from '../../app'
import server from '../../server'
import request from 'supertest'
import seed from './seed'
import { BookModel } from '../../models/example.model'
import { connectDB, disconnectDB } from '../../config/db.connect'
const testBook = {
bookId: 7,
title: 'test book',
price: 777,
}
describe('example book model', () => {
beforeAll(async () => {
await BookModel.insertMany(seed)
})
afterAll(async () => {
disconnectDB()
server.close()
})
beforeEach(async () => {
await BookModel.deleteMany({
title: 'test book',
})
})
describe('GET /api/books', () => {
it('should return all books', async () => {
const res = await request(app).get('/api/books')
expect(res.statusCode).toBe(200)
expect(res.body).not.toBeNull()
})
})
describe('GET /api/books/:id', () => {
it('should return a book', async () => {
const res = await request(app).get('/api/books/4')
expect(res.statusCode).toBe(200)
expect(res.body.title).toBe('mock book four')
})
})
describe('POST /api/books', () => {
it('shoud create a new book', async () => {
const res = await request(app).post('/api/books').send(testBook)
expect(res.statusCode).toBe(201)
expect(res.body.bookId).toBe(7)
})
})
describe('PATCH /api/books', () => {
it('shoud update a book', async () => {
await request(app).post('/api/books').send(testBook)
const res = await request(app).patch('/api/books/7').send({
price: 765,
})
expect(res.statusCode).toBe(200)
expect(res.body.price).toBe(765)
})
})
describe('DELETE /api/books/:id', () => {
it('should delete a book', async () => {
await request(app).post('/api/books').send(testBook)
const res = await request(app).delete('/api/books/7')
expect(res.statusCode).toBe(200)
})
})
})