Tôi đến muộn, nhưng tôi đã tìm ra cách tốt nhất để thiết lập bộ thử nghiệm mocha cho ứng dụng nhanh là tạo tệp app.js hoặc server.js của tôi xuất khẩu các đối tượng ứng dụng, như thế này:
var mongoose = require('mongoose');
var express = require('express');
require('express-mongoose');
var env = process.env.NODE_ENV || 'development';
var config = require('./config/config')[env];
var models = require('./app/models');
var middleware = require('./app/middleware');
var routes = require('./app/routes');
var app = express();
app.set('port', process.env.PORT || config.port || 3000);
app.set('views', __dirname + '/app/views');
app.set('view engine', 'jade');
// database
mongoose.connect(config.db);
// middleware
middleware(app);
// Application routes
routes(app);
app.listen(app.get('port'));
console.log('Express server listening on port ' + app.get('port'));
// export app so we can test it
exports = module.exports = app;
chắc chắn rằng tập tin cấu hình của bạn có môi trường khác nhau như phát triển, thử nghiệm, sản xuất thiết lập:
var path = require('path');
var rootPath = path.normalize(__dirname + '/..');
module.exports = {
development: {
db: 'mongodb://localhost/my_dev_db',
port: 3000
},
test: {
db: 'mongodb://localhost/my_test_db',
port: 8888
},
production: {
// ...
}
}
sau đó trong các tập tin thử nghiệm của bạn, bạn có thể đi trước và yêu cầu ứng dụng của bạn, sẽ kết nối với db bên phải và trên cổng bên phải:
var should = require('chai').should();
var request = require('supertest');
var mongoose = require('mongoose');
var app = require('../app');
var agent = request.agent(app);
var User = mongoose.model('User');
// get users
describe('GET /api/users', function() {
it('returns users as JSON', function(done) {
agent
.get('/api/users')
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if (err) return done(err);
res.body.should.have.property('users').and.be.instanceof(Array);
done();
});
});
});
Và cuối cùng, để bắt đầu lên toàn bộ quái vật bạn bao gồm này trong thư mục package.json
(hãy chắc chắn để có nodemon và mocha trong devDependencies của bạn):
"scripts": {
"start": "NODE_ENV=development ./node_modules/.bin/nodemon app.js",
"test": "NODE_ENV=test ./node_modules/.bin/mocha --reporter spec test/**.js"
}
Bây giờ bạn có thể bắt đầu bộ kiểm tra của bạn với npm test
và ứng dụng của bạn với npm start
.
Hy vọng điều đó sẽ hữu ích! ps: hầu hết những thứ tôi đã học được khi xem ví dụ tuyệt vời này: https://github.com/madhums/node-express-mongoose-demo
Tôi đã gặp phải sự cố tương tự. Tôi đã thiết kế lại máy chủ tốc hành của mình và bây giờ nó không đợi kết nối cơ sở dữ liệu hoặc bất kỳ loại khởi tạo không đồng bộ nào. Đó cũng là lý tưởng cho các máy chủ REST vì nó không cần thiết để kết nối với cơ sở dữ liệu ngay cả khi không có yêu cầu đến một môi trường REST. Ngoài ra, mỗi cuộc gọi không nhất thiết cần tất cả các mô hình. Trong trường hợp của tôi, tôi khởi tạo cơ sở dữ liệu khi cần thiết mà hầu như mọi cuộc gọi đều thực hiện. – Kamrul
@Kamrul: Bạn có thể vui lòng chia sẻ một số mã mẫu như cách bạn đã làm điều đó không? –