Skip to content

Commit 106af4f

Browse files
E2E Testing MongoDB application with Mockgoose.
1 parent 832eb51 commit 106af4f

18 files changed

Lines changed: 10270 additions & 0 deletions
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import * as express from 'express';
2+
import * as bodyParser from 'body-parser';
3+
import * as request from 'supertest';
4+
import { Test } from '@nestjs/testing';
5+
import { CatsModule } from '../../src/modules/cats/cats.module';
6+
7+
describe('Cats', () => {
8+
const server = express();
9+
server.use(bodyParser.json());
10+
11+
beforeAll(async () => {
12+
const module = await Test.createTestingModule({
13+
modules: [CatsModule],
14+
})
15+
.compile();
16+
17+
const app = module.createNestApplication(server);
18+
await app.init();
19+
});
20+
21+
it(`/POST insert cat`, () => {
22+
return request(server)
23+
.post('/cats')
24+
.send({
25+
name: 'Tiger',
26+
age: 2,
27+
breed: 'Russian Blue'
28+
})
29+
.expect(201);
30+
});
31+
32+
it(`/GET cats`, async (done) => {
33+
34+
const cats = await request(server)
35+
.get('/cats')
36+
.expect(200);
37+
38+
const [cat] = cats.body;
39+
40+
expect(cat.name).toBe('Tiger');
41+
expect(cat.age).toBe(2);
42+
expect(cat.breed).toBe('Russian Blue');
43+
44+
done();
45+
});
46+
});
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"moduleFileExtensions": [
3+
"ts",
4+
"tsx",
5+
"js",
6+
"json"
7+
],
8+
"transform": {
9+
"^.+\\.tsx?$": "<rootDir>/../node_modules/ts-jest/preprocessor.js"
10+
},
11+
"testRegex": "/e2e/.*\\.(e2e-test|e2e-spec).(ts|tsx|js)$",
12+
"collectCoverageFrom" : ["src/**/*.{js,jsx,tsx,ts}", "!**/node_modules/**", "!**/vendor/**"],
13+
"coverageReporters": ["json", "lcov"]
14+
}

examples/10-mockgoose/index.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require('ts-node/register');
2+
require('./src/server');
3+
4+
5+
6+
7+
8+
9+
10+
11+
12+
13+
14+

examples/10-mockgoose/package.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "nest-typescript-starter",
3+
"version": "1.0.0",
4+
"description": "Nest TypeScript starter repository",
5+
"license": "MIT",
6+
"scripts": {
7+
"start": "node index.js",
8+
"prestart:prod": "tsc",
9+
"start:prod": "node dist/server.js",
10+
"e2e": "jest --config=e2e/jest-e2e.json",
11+
"e2e:watch": "jest --watch --config=e2e/jest-e2e.json"
12+
},
13+
"dependencies": {
14+
"@nestjs/common": "^4.3.0",
15+
"@nestjs/core": "^4.3.0",
16+
"@nestjs/microservices": "^4.3.0",
17+
"@nestjs/testing": "^4.3.0",
18+
"@nestjs/websockets": "^4.3.0",
19+
"mongoose": "^4.11.13",
20+
"redis": "^2.7.1",
21+
"reflect-metadata": "^0.1.10",
22+
"rxjs": "^5.4.3",
23+
"typescript": "^2.4.2"
24+
},
25+
"devDependencies": {
26+
"@types/mongoose": "^4.7.23",
27+
"@types/jest": "^20.0.8",
28+
"@types/node": "^7.0.41",
29+
"mockgoose": "^7.3.3",
30+
"jest": "^20.0.4",
31+
"supertest": "^3.0.0",
32+
"ts-jest": "^20.0.14",
33+
"ts-node": "^3.3.0"
34+
}
35+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Module } from '@nestjs/common';
2+
import { CatsModule } from './cats/cats.module';
3+
4+
@Module({
5+
modules: [CatsModule],
6+
})
7+
export class ApplicationModule {}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
2+
import { CreateCatDto } from './dto/create-cat.dto';
3+
import { CatsService } from './cats.service';
4+
import { Cat } from './interfaces/cat.interface';
5+
6+
@Controller('cats')
7+
export class CatsController {
8+
constructor(private readonly catsService: CatsService) {}
9+
10+
@Post()
11+
async create(@Body() createCatDto: CreateCatDto) {
12+
this.catsService.create(createCatDto);
13+
}
14+
15+
@Get()
16+
async findAll(): Promise<Cat[]> {
17+
return this.catsService.findAll();
18+
}
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Module } from '@nestjs/common';
2+
import { CatsController } from './cats.controller';
3+
import { CatsService } from './cats.service';
4+
import { catsProviders } from './cats.providers';
5+
import { DatabaseModule } from '../database/database.module';
6+
7+
@Module({
8+
modules: [DatabaseModule],
9+
controllers: [CatsController],
10+
components: [
11+
CatsService,
12+
...catsProviders,
13+
],
14+
})
15+
export class CatsModule {}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as mongoose from 'mongoose';
2+
import { CatSchema } from './schemas/cat.schema';
3+
4+
export const catsProviders = [
5+
{
6+
provide: 'CatModelToken',
7+
useFactory: (mongoose) => mongoose.connection.model('Cat', CatSchema),
8+
inject: ['DbToken'],
9+
},
10+
];
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Model } from 'mongoose';
2+
import { Component, Inject } from '@nestjs/common';
3+
import { Cat } from './interfaces/cat.interface';
4+
import { CreateCatDto } from './dto/create-cat.dto';
5+
6+
@Component()
7+
export class CatsService {
8+
constructor(
9+
@Inject('CatModelToken') private readonly catModel: Model<Cat>) {}
10+
11+
async create(createCatDto: CreateCatDto): Promise<Cat> {
12+
const createdCat = new this.catModel(createCatDto);
13+
return await createdCat.save();
14+
}
15+
16+
async findAll(): Promise<Cat[]> {
17+
return await this.catModel.find().exec();
18+
}
19+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export class CreateCatDto {
2+
readonly name: string;
3+
readonly age: number;
4+
readonly breed: string;
5+
}

0 commit comments

Comments
 (0)