Cypress:模拟服务器端功能

问题描述

我正在构建 Next.js 应用程序。我有一个 server side route 用于使用 Magic 登录

import type { NextApiHandler } from 'next';
import { setTokenCookie } from 'utils/cookies';
import magic from 'utils/magic';
import { encryptSession } from 'utils/sessions';
import type { ApiErrorResponse } from 'utils/types';

export type LoginHandlerSuccessResponse = {
  done: true;
};

type LoginHandlerResponse = ApiErrorResponse | LoginHandlerSuccessResponse;

const loginHandler: NextApiHandler<LoginHandlerResponse> = async (
  request,response,) => {
  const authHeaders = request.headers.authorization;

  if (authHeaders) {
    const didToken = magic.utils.parseAuthorizationHeader(authHeaders);
    const Metadata = await magic.users.getMetadataByToken(didToken);
    const session = { ...Metadata };
    const token = await encryptSession(session);
    setTokenCookie(response)(token);
    return response.status(200).json({ done: true });
  }

  return response.status(400).json({ message: 'No token found in request.' });
};

export default loginHandler;

在我的 Cypress 测试中,我试图像这样存根 magic.users.getMetadataByToken 方法

describe.only('login and logout flow',() => {
  beforeEach(() => {
    // cy.stub(magic.users,'getMetadataByToken').resolves({
    //   email: 'test+success@magic.link',//   issuer: 'did:ethr:0x1e9FF803fFA22209A10A087cc8361d4aa3528c45',//   publicAddress: '0x1e9FF803fFA22209A10A087cc8361d4aa3528c45',// });
    // magic.users.getMetadataByToken = cy.stub();
  });

  // ...

但是由于某种原因,该函数没有被模拟。我认为这与代码在服务器端运行的事实有关。有没有办法模拟 API 路由中的特定行,而不必intercept 整个路由?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...