这是控制器代码。该帖子或创建一个用户。电子邮件应该是唯一的,并且不能使用同一电子邮件再次创建帐户。
exports.saveUser = (request, response) => {
const result = (savedUser) => {
response.status(200);
response.json(savedUser);
};
bcrypt.hash(request.body.user.password, saltRounds, function(err, hash) {
let user = {
first_name : request.body.user.firstName,
last_name : request.body.user.lastName,
email : request.body.user.email,
hashed_password : hash
}
console.log("conroller")
const promise = userService.save(user);
promise
.then(result)
.catch(renderErrorResponse(response));
});
};
这是服务层
'use strict';
const db = require("./../../models")
/**
* Saves the new user object.
*
* @param user
*/
exports.save = (user,result) => {
return db.User_tbl.create({
first_name: user.first_name,
last_name:user.last_name,
email:user.email,
hashed_password:user.hashed_password
})
}
下面是用户模型
module.exports = (sequelize,DataTypes)=>{
const user = sequelize.define("User_tbl",{
first_name:{
type: DataTypes.STRING(64),
allowNull:false
},
last_name:{
type: DataTypes.STRING(64),
allowNull:false
},
email:{
type: DataTypes.STRING(64),
allowNull:false,
unique:true
},
hashed_password:{
type: DataTypes.STRING(255),
allowNull:false
},
id:{
type:DataTypes.INTEGER,
primaryKey:true,
autoIncrement: true
}
})
return user;
}
我已经做过的事情包括编写命中测试数据库的测试……但是由于在托管方面没有数据库,因此在PR检查中不起作用。尝试模拟续集,但文档不正确。
情况:无法使用同一封电子邮件再次创建用户帐户。如果要使用Sinon,则需要stub userService.save。您需要定义在第一次调用(成功)和第二次调用(失败)中哪个check argument和define stub's behaviour的存根。最后,您需要验证存根get called twice或至少不止一次。我无法提供示例,因为我几乎不使用玩笑,但原理仍然相同。
取决于所使用的数据库,可以使用内存数据库。做法是在测试前打开/启动数据库,在测试后关闭/停止。如果使用mongodb,则可以使用mongodb-memory-server。
希望这会有所帮助。