创建并连接到测试数据库以测试Express.JS REST API

时间:2016-08-11 21:25:33

标签: mongodb unit-testing express mongoose mocha

我正在使用Express和Mongoose构建REST API并使用Mocha和Chai进行测试。

我试图建立一个单独的测试数据库和环境来测试API但不确定如何使用Express执行此操作。你会怎么做呢?

请参阅下面的app-test.jsapp.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;

提前致谢。

1 个答案:

答案 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)