我有一个带有两个模块的应用程序(Book和User)。书模型看起来像这样:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var BookModel = new Schema({
name: String,
author: String,
description: String,
_user: {type: Schema.Types.ObjectId, ref: 'User'}
});
module.exports = mongoose.model('Book', bookModel);
用户模型:
var mongoose = require('mongoose'),
bcrypt = require('bcryptjs'),
Schema = mongoose.Schema;
var userModel = new Schema({
name: String,
username: String,
password: String,
});
module.exports = mongoose.model('User', userModel);
我想在POST方法中进行单元测试(在DB中插入一本书),条件是不允许空名。这就是我在POST方法中所拥有的:
var post = function (req, res) {
var bookNew = new book(req.body);
// get paylod from the user's token
var payload = tokenManager.getPayload(req.headers);
if (req.body._user)
delete req.body._user;
if (!req.body.name) {
res.status(400);
res.send("Name is required");
} else if (payload == null || payload == undefined) {
res.status(400);
res.send("Token error");
} else {
// store the user id
bookNew.set('_user', payload.id);
bookNew.save();
res.status(201);
res.send("Book saved");
}
};
如您所见,我从令牌中获取payload
(在用户登录时创建)。我这样做是因为有效负载包含用户ID,然后我将其插入_user
(书籍模型中的属性)。
问题在于,如果我进行单元测试以验证书的属性(name
)是否已填满,我没有用户来检索有效负载。因此,有效载荷将是未定义的,并且书本单元测试在任何情况下都不会成功。你对我该做什么有什么建议吗?看起来我必须创建一个用户才能测试所有的图书模块...但我不确定这是否是最合适的解决方案。