gpt4 book ai didi

node.js - 如何编写测试来测试 Controller 和 api,以便我可以在不依赖数据库的情况下运行 PR 检查?

转载 作者:行者123 更新时间:2023-12-03 22:34:54 27 4
gpt4 key购买 nike

这是 Controller 代码。该帖子或创建用户。电子邮件应该是唯一的,并且不能使用相同的电子邮件再次创建帐户。


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;
}


我所做的事情包括编写 HitTest 数据库的测试......但这在 PR 检查中不起作用,因为在托管端没有数据库。尝试模拟 Sequelize 但不正确的文档。

最佳答案

  • 上下文:您测试的函数是 saveUser

  • 案例:无法使用相同的电子邮件再次创建用户帐户。如果你想使用Sinon,那么,你需要 stub userService.save。您需要在第一次调用(成功)和第二次调用(失败)时定义 stub which check argumentdefine stub's behaviour 。最后,您需要验证您的 stub get called twice 是否或至少不止一次。我无法提供示例,因为我几乎不使用 jest,但原理仍然相同。
  • 上下文:您想在测试环境中测试 HitTest 数据库但没有数据库。

  • 取决于您使用的数据库,您可以使用内存数据库。做法是测试前开启/启动db,测试后关闭/停止。如果您使用 mongodb,则可以使用 mongodb-memory-server
    希望这可以帮助。

    关于node.js - 如何编写测试来测试 Controller 和 api,以便我可以在不依赖数据库的情况下运行 PR 检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62054401/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com