问题描述
我需要在以下代码中测试注册用户功能。应该如何做到这一点?我尝试了几次模拟列表和处理程序的尝试,但它对我不起作用。
以下代码是入口点,创建 authList 实例并将其传递给 auth 端点处理程序。
index.js
const authList = makeAuthList();
const authEndpointHandler = makeAuthEndPointHandler({ authList });
export default authEndpointHandler;
Authlist 是使用 mongoose 执行 mongo 数据库操作的地方。
auth.list.js
export default function makeAuthList() {
function insertUser(data) {
return new User(data).save();
}
function findUserIsExists(email) {
return User.countDocuments(email);
}
return Object.freeze({
insertUser,findUserIsExists
});
}
Auth 控制器对请求进行规范化,并根据结果将响应传递给对象处理程序并分派 HTTP 响应。
auth-controller.js
export default function authController(req,res) {
const httpRequest = normalizeRequest(req);
authEndpointHandler(httpRequest)
.then(({ data }) => {
if (data.status) {
return successResponse(res,data);
}
return errorResponse(res,data);
})
.catch((error) => {
errorResponse(res,{
code: 500,message: error.message,});
});
}
此文件是身份验证端点处理程序实现,其中包含需要测试的异步函数内的异步函数。
auth-endpoint.js
export default function makeAuthEndPointHandler({ authList }) {
async function registerUser(httpRequest) {
try {
const { fullName,email,password } = httpRequest.body;
const existCount = await authList.findUserIsExists({ email }).catch((error) => {
throw customException(error.message);
});
if (existCount > 0) {
throw customException(
`User email '${email}' is already exists`,code: 409,);
}
const updatedProps = {
password: encryptField(password),};
const userObj = { ...updatedProps,fullName };
await authList.insertUser(userObj).catch((error) => {
throw customException(error.message);
});
return objectHandler({
status: 200,message: `User account '${email}' created successful`,});
} catch (error) {
const { code,message } = error;
return objectHandler({ code,message });
}
}
return async function handle(httpRequest) {
switch (httpRequest.path) {
case '/register':
return registerUser(httpRequest);
default:
return objectHandler({
code: 405,message: `${httpRequest.method} method not allowed`,});
}
};
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)