使用 Jest 在异步函数中测试 NodeJS 异步函数

问题描述

我需要在以下代码中测试注册用户功能。应该如何做到这一点?我尝试了几次模拟列表和处理程序的尝试,但它对我不起作用。

以下代码是入口点,创建 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...