Vấn đề của tôi
Tôi đã viết mã một API CRUD rất đơn giản và gần đây tôi đã bắt đầu mã hóa một số thử nghiệm bằng cách sử dụng chai
và chai-http
nhưng tôi đang gặp sự cố khi chạy thử nghiệm của mình với $ mocha
.
Khi tôi chạy các bài kiểm tra, tôi gặp lỗi sau trên shell:
TypeError: app.address is not a function
Mã của tôi
Đây là mẫu một trong các bài kiểm tra của tôi ( /tests/server-test.js ):
var chai = require('chai');
var mongoose = require('mongoose');
var chaiHttp = require('chai-http');
var server = require('../server/app'); // my express app
var should = chai.should();
var testUtils = require('./test-utils');
chai.use(chaiHttp);
describe('API Tests', function() {
before(function() {
mongoose.createConnection('mongodb://localhost/bot-test', myOptionsObj);
});
beforeEach(function(done) {
// I do stuff like populating db
});
afterEach(function(done) {
// I do stuff like deleting populated db
});
after(function() {
mongoose.connection.close();
});
describe('Boxes', function() {
it.only('should list ALL boxes on /boxes GET', function(done) {
chai.request(server)
.get('/api/boxes')
.end(function(err, res){
res.should.have.status(200);
done();
});
});
// the rest of the tests would continue here...
});
});
Và express
các tệp ứng dụng của tôi ( /server/app.js ):
var mongoose = require('mongoose');
var express = require('express');
var api = require('./routes/api.js');
var app = express();
mongoose.connect('mongodb://localhost/db-dev', myOptionsObj);
// application configuration
require('./config/express')(app);
// routing set up
app.use('/api', api);
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
và ( /server/routes/api.js ):
var express = require('express');
var boxController = require('../modules/box/controller');
var thingController = require('../modules/thing/controller');
var router = express.Router();
// API routing
router.get('/boxes', boxController.getAll);
// etc.
module.exports = router;
Ghi chú bổ sung
Tôi đã thử đăng xuất server
biến trong tệp /tests/server-test.js trước khi chạy thử nghiệm:
...
var server = require('../server/app'); // my express app
...
console.log('server: ', server);
...
và tôi là kết quả của điều đó là một đối tượng rỗng: server: {}
.