我正在使用Express和Mongoose构建REST API并使用Mocha和Chai进行测试。
我试图建立一个单独的测试数据库和环境来测试API但不确定如何使用Express执行此操作。你会怎么做呢?
请参阅下面的app-test.js
和app.babel.js
:
应用-test.js
import chai from 'chai';
import mongoose from 'mongoose';
import Post from '../models/posts';
import app from '../app.babel';
import chaiHttp from 'chai-http';
chai.use(chaiHttp);
const expect = chai.expect;
describe('GET /posts', () => {
it('should return a 200 status code', (done) => {
chai.request(app)
.get('/api/posts')
.set('Accept', 'application/json')
.end( (err, res) => {
expect(err).to.be.null;
expect(res).to.have.status(200);
done();
});
});
});
describe('DELETE /posts', () => {
it('should return 200', (done) => {
const post = {
"title": "velit minim aliqua quis proident",
"body": "Quis tempor elit pariatur pariatur",
"posted": "2014-03-13T04:23:30 -00:00"
};
Post.create(post, (err, post) => {
chai.request(app)
.del('/api/posts/' + post._id)
.end( (err, res) => {
expect(err).to.be.null;
expect(res).to.have.status(200);
done();
});
});
});
});
app.babel.js
import express from 'express';
import mongoose from 'mongoose';
import Post from './models/posts';
mongoose.connect('mongodb://localhost/blog-site');
const app = express();
app.use('/', express.static('public'));
app.get('/api/posts', (req, res) => {
Post.find( (err, doc) => {
if(err) return console.error(err);
res.send(doc)
});
});
app.delete('/api/posts/:_id', (req, res) => {
Post.findOneAndRemove({ _id: req.params._id }, (err) => {
if(err) return console.error(err);
res.sendStatus(200);
});
});
app.listen(process.env.PORT || 3000);
export default app;
提前致谢。
答案 0 :(得分:1)
添加不同的js文件,您可以在其中登记测试和生产数据库。 像这样:
process.env.NODE_ENV = 'test'
process.env.MONGO_URL = 'mongodb://localhost/testing'
虽然连接写得像这样:
var dbUri = process.env.MONGO_URL || 'mongodb://localhost/testing'
var db = mongoose.connect(dbUri)