在我的routes.js 中我有:
app.post('/api/useraccounts', useraccountController.create);
在我的 useraccountController.js 中我有:
exports.create = function(req, res, next) {
var registerUseraccountViewModel = new RegisterUseraccountViewModel(req.body.firstName, req.body.lastName,
req.body.email, req.body.password);
//Validation of parameters done inside viewmodel
if(registerUseraccountViewModel instanceof Error) {
res.json(406, { error: registerUseraccountViewModel.message });
if(next) next();
} else {
useraccountBusinessLogic.create(registerUseraccountViewModel, function(err, data) {
if(err) {
res.json(400, { error: err.message });
} else {
res.json(200, { useraccount: data });
}
//console.log(callback);
if(next) next();
});
}
}
我基本上需要下一个不是为了移交给下一个路线,而是为了使用 Mocha 进行异步单元测试:
it('should return an error json because the useraccount already exists', function(done) {
//Insert useraccount to database so there will be a dupplicate
useraccountController.create(helper.requestMock, helper.responseMock, function() {
useraccountController.create(helper.requestMock, helper.responseMock, function() {
assert(helper.responseStatusCode == 400);
assert(helper.responseJson['error'] && helper.responseJson['error'] != "");
done();
});
});
})
测试效果很好。 不幸的是,当从我的routes.js 调用该方法时,next 并不是未定义的。但我希望在routes.js 中的app.post 调用时它是未定义的。
这就是窍门:
app.post('/api/useraccounts', function(req, res) {
useraccountController.create(req, res);
});