refactor app.js

test not found routes
This commit is contained in:
2018-05-18 16:41:43 +03:00
parent fed71d59e3
commit c0af83f3f1
9 changed files with 3131 additions and 32 deletions

View File

@@ -1,3 +1,12 @@
PORT=4000
DEV_APP_PORT =
MONGODB_URI="mongodb://localhost/todolist"
DEV_DB_HOST =
DEV_DB_PORT =
DEV_DB_NAME =
TEST_APP_PORT =
TEST_DB_HOST =
TEST_DB_PORT =
TEST_DB_NAME =

View File

@@ -1,5 +1,6 @@
{
"extends": ["airbnb-base"],
"extends": ["airbnb-base", "plugin:jest/recommended"],
"plugins": ["jest"],
"rules": {
"linebreak-style": "off",
"no-unused-expressions": [

32
app.js
View File

@@ -1,30 +1,14 @@
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const methodOverride = require('method-override');
const morgan = require('morgan');
require('dotenv').config();
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(morgan('tiny'));
app.use(methodOverride('_method'));
mongoose.connect(process.env.MONGODB_URI);
const config = require('./config');
require('./config/db');
const app = require('./config/app');
require('./models/Todo');
require('./models/TodoList');
const todos = require('./routes/todos');
const lists = require('./routes/lists');
app.use('/todos', todos);
app.use('/lists', lists);
app.use('/todos', require('./routes/todos'));
app.use('/lists', require('./routes/lists'));
// 404 route
app.use((req, res) => {
@@ -36,7 +20,7 @@ app.use((req, res) => {
}
if (req.accepts('json')) {
req.send({ error: 'Not found' });
res.send({ error: 'Not found' });
return;
}
@@ -61,6 +45,8 @@ app.use((error, req, res, next) => {
next(error);
});
app.listen(process.env.PORT, () => {
const server = app.listen(config.app.port, () => {
console.log('Started!');
});
module.exports = server;

15
config/app.js Normal file
View File

@@ -0,0 +1,15 @@
const express = require('express');
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
const morgan = require('morgan');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(morgan('tiny'));
app.use(methodOverride('_method'));
module.exports = app;

7
config/db.js Normal file
View File

@@ -0,0 +1,7 @@
const mongoose = require('mongoose');
const config = require('./');
const { host, port, name } = config.db;
const connectionString = `mongodb://${host}:${port}/${name}`;
mongoose.connect(connectionString);

29
config/index.js Normal file
View File

@@ -0,0 +1,29 @@
const env = process.env.NODE_ENV;
const dev = {
app: {
port: process.env.DEV_APP_PORT || 4000,
},
db: {
host: process.env.DEV_DB_HOST || 'localhost',
port: process.env.DEV_DB_PORT || 27017,
name: process.env.DEV_DB_NAME || 'todolist',
},
};
const test = {
app: {
port: process.env.TEST_APP_PORT || 4001,
},
db: {
host: process.env.TEST_DB_HOST || 'localhost',
port: process.env.TEST_DB_PORT || 27017,
name: process.env.TEST_DB_NAME || 'todolistTest',
},
};
const config = {
dev,
test,
};
module.exports = config[env] || config.dev;

3015
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,7 +7,7 @@
"scripts": {
"start": "node ./app.js",
"debug": "npx nodemon --inspect ./app.js",
"test": "echo \"Error: no test specified\" && exit 1"
"test": "jest"
},
"author": "",
"dependencies": {
@@ -25,7 +25,13 @@
"eslint": "^4.19.1",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-config-node": "^2.0.0",
"eslint-plugin-import": "^2.11.0",
"nodemon": "^1.17.4"
"eslint-plugin-import": "^2.12.0",
"eslint-plugin-jest": "^21.15.1",
"jest": "^22.4.4",
"nodemon": "^1.17.4",
"supertest": "^3.1.0"
},
"jest": {
"testEnvironment": "node"
}
}

View File

@@ -0,0 +1,37 @@
const server = require('../../app.js');
const request = require('supertest');
const mongoose = require('mongoose');
afterAll(async () => {
await mongoose.connection.dropDatabase();
await mongoose.disconnect();
await server.close();
});
describe('Test not found', () => {
test('respond not found with json', async () => {
const response = await request(server)
.get('/')
.set('Accept', 'application/json')
.expect(404)
.expect('Content-Type', 'application/json; charset=utf-8');
expect(response.body).toEqual({ error: 'Not found' });
});
test('respond not found with html', async () => {
const response = await request(server)
.get('/')
.set('Accept', 'text/html')
.expect(404)
.expect('Content-Type', 'text/html; charset=utf-8');
expect(response.text).toEqual('404');
});
test('respond not found with plain text', async () => {
const response = await request(server)
.get('/')
.set('Accept', 'text/plain')
.expect(404)
.expect('Content-Type', 'text/plain; charset=utf-8');
expect(response.text).toEqual('not found');
});
});